`

Table功能演示(添加、删除以及为Table设置行号)

阅读更多
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

final public class TableDemo extends JFrame {
	private static final long serialVersionUID = 1L;
	private JButton increaseHeightButton, reduceHeightButton, addRowButton,
			deleteRowButton;
	private LineNumberTablePane tablePane;

	private JTable primaryTable = new JTable(), numberTable = new JTable();

	public TableDemo() throws HeadlessException {
		super("line number table");
		initButton();
		// buildPrimaryTable();
		tablePane = new LineNumberTablePane(primaryTable, numberTable);
		buildPrimaryTable();
		doLay();
		// tablePane.refershRowHeader();
	}

	private void buildPrimaryTable() {
		String[][] datas = new String[][] { { "老张", "28", "56.2" },
				{ "小杨", "30", "56.2" }, { "大李", "33", "56.2" },
				{ "胖刘", "35", "156.2" } };
		String[] columnNames = new String[] { "姓名", "年龄", "体重" };
		primaryTable.setModel(new DefaultTableModel(datas, columnNames));
		tablePane.notifyRowsChanged();
	}

	private void initButton() {
		increaseHeightButton = new JButton("increase row height");
		increaseHeightButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int old = primaryTable.getRowHeight();
				primaryTable.setRowHeight(old + 5);
			}
		});

		reduceHeightButton = new JButton("reduce row height");
		reduceHeightButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int old = primaryTable.getRowHeight();
				primaryTable.setRowHeight(old - 5);
			}
		});

		addRowButton = new JButton("add row");
		addRowButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				DefaultTableModel dm = (DefaultTableModel) primaryTable
						.getModel();

				String[] insertedRowData = new String[] { "无名氏", "X", "Y" };
				dm.insertRow(0, insertedRowData);
				tablePane.notifyRowsChanged();
				tablePane.scrollRowToVisible(10);
			}
		});

		deleteRowButton = new JButton("delete Row");
		deleteRowButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				DefaultTableModel dm = (DefaultTableModel) primaryTable
						.getModel();
				dm.removeRow(0);
				tablePane.notifyRowsChanged();
				tablePane.scrollRowToVisible(10);
			}
		});
	}

	private void doLay() {
		Container container = getContentPane();

		JPanel buttonsPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
		buttonsPane.add(increaseHeightButton);
		buttonsPane.add(reduceHeightButton);
		buttonsPane.add(addRowButton);
		buttonsPane.add(deleteRowButton);

		container.add(buttonsPane, BorderLayout.NORTH);
		container.add(tablePane, BorderLayout.CENTER);
		setSize(470, 200);
		setVisible(true);
	}

	public static void main(String[] args) {
		new TableDemo();
	}
}

 

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.beans.*;
//为Table添加行号
final public class LineNumberTablePane extends JScrollPane {
	private static final long serialVersionUID = 1L;

	private JTable primaryTable = new JTable();
	private JTable numberTable = new JTable();

	private static final int DEFAULT_MIN_ROW_HEADER_WIDTH = 30;

	private static final String ROW_HEADER_IDENTIFIER = "lineNumberColumn";
	private static final String ROW_HEADER_COLUMN_NAME = "lineNumberRowColumn";
	private static final String ROW_HEADER_VALUE = "行号";

	private TableColumn rowHeaderColumn = new TableColumn(0);
	private DefaultTableModel rowHeaderTableModel = new NumberTableModel();

	public LineNumberTablePane(final JTable primaryTableComponent,
			final JTable numberTableComponent) {
		super(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		primaryTable = primaryTableComponent;
		numberTable = numberTableComponent;
		numberTable.setModel(rowHeaderTableModel);
		numberTable.setColumnModel(new NumberTableColumnModel());

		checkPropertyListeners();
		notifyRowsChanged();
	}

	public void notifyRowsChanged() {
		while (rowHeaderTableModel.getRowCount() > 0)
			rowHeaderTableModel.removeRow(0);
		for (int i = 0, j = primaryTable.getRowCount(); i < j; i++) {
			rowHeaderTableModel.addRow(new Integer[] { i + 1 });
		}
		adjustRowHeaderHeight();
	}

	private void adjustRowHeaderHeight() {
		setViewportView(primaryTable);
		setRowHeaderView(numberTable);
		int h = this.getVerticalScrollBar().getSize().height;
		getRowHeader().setPreferredSize(
				new Dimension(DEFAULT_MIN_ROW_HEADER_WIDTH, h));
	}

	private void checkPropertyListeners() {
		primaryTable.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent evt) {
				if (evt.getPropertyName().equals("rowHeight")) {
					Integer h = (Integer) evt.getNewValue();
					numberTable.setRowHeight(h);
					adjustRowHeaderHeight();
				}
			}
		});
	}

	public void scrollRowToVisible(int row) {
		int rowMargin = primaryTable.getRowMargin();

		int y = 0, w = 0;
		for (int i = 0; i < row; i++)
			y += primaryTable.getRowHeight(i) + rowMargin;

		TableColumnModel columnModel = primaryTable.getColumnModel();
		for (int i = 0, j = columnModel.getColumnCount(); i < j; i++)
			w += columnModel.getColumn(i).getWidth();

		primaryTable.scrollRectToVisible(new Rectangle(0, y, w, primaryTable
				.getRowHeight(row)));
	}

	public JTable getPrimaryTable() {
		return primaryTable;
	}

	public JTable getRowHeaderTable() {
		return numberTable;
	}

	private class NumberTableModel extends DefaultTableModel {
		private static final long serialVersionUID = 1L;

		public int getColumnCount() {
			return 1;
		}

		public boolean isCellEditable(int rowIndex, int columnIndex) {
			return false;
		}

		public Object getValueAt(int rowIndex, int columnIndex) {
			return columnIndex == 0 ? rowIndex + 1 : null;
		}

		public String getColumnName(int column) {
			return column == 0 ? ROW_HEADER_COLUMN_NAME : "";
		}

		public Class<?> getColumnClass(int columnIndex) {
			return columnIndex == 0 ? Integer.class : null;
		}
	}

	private class NumberTableColumnModel extends DefaultTableColumnModel {
		private static final long serialVersionUID = 1L;

		private NumberTableColumnModel() {
			rowHeaderColumn.setIdentifier(ROW_HEADER_IDENTIFIER);
			rowHeaderColumn.setHeaderValue(ROW_HEADER_VALUE);

			TableCellRenderer renderer = new RowHeaderCellRenderer();

			rowHeaderColumn.setCellRenderer(renderer);
			rowHeaderColumn.setHeaderRenderer(renderer);
			addColumn(rowHeaderColumn);
		}

		public int getColumnCount() {
			return 1;
		}
	}

	private class RowHeaderCellRenderer implements TableCellRenderer {
		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
			JLabel label = new JLabel() {
				private static final long serialVersionUID = 1L;

				public Insets getInsets() {
					return new Insets(0, 0, 0, 0);
				}
			};

			label.setHorizontalAlignment(SwingConstants.RIGHT);
			if (column == 0) {
				label.setText(value.toString());
				label.setOpaque(true);
				label.setBackground(Color.BLACK);
				label.setForeground(Color.YELLOW);
			}
			return label;
		}
	}
}

 

分享到:
评论

相关推荐

    使用jquery给指定的table动态添加一行、删除一行

    支持在任意行添加一行且可配置的,如可在第一行添加一行、第二行添加一行、倒数第一行添加一行、倒数第二行添加一行,随需求的变化都不会影响。 前提条件:行数需在表中存在否则添加不成功。 2)、删除一行 支持动态...

    java实现table添加右键点击事件监听操作示例

    例如,在 Table 中添加右键点击事件监听操作,可以提供更多的功能,例如数据编辑、数据删除等。 如何实现 Table 添加右键点击事件监听操作? 以下是一个简单的示例,演示如何在 Java 中实现 Table 添加右键点击...

    演示了 QTableWidget的初始化以及单元格值改变时响应槽函数,打印单元格 并且,最后列不一样,是combobox

    这个示例项目名为"tableWidget_comboBox",它演示了如何初始化一个QTableWidget,并且当单元格值发生变化时,如何响应槽函数来处理这些变化。在特定情况下,最后一列被设计为组合框(ComboBox),增加了交互性。 ...

    fastreport固定行数分页不足补空白行

    本篇将详细介绍如何在FastReport中实现这个功能,并通过一个完整的Demo来演示具体步骤。 1. **理解FastReport分页原理** 在FastReport中,分页是基于报表的每个细节带区(DetailBand)来计算的。每个带区代表报表...

    [WordPress插件]代码高亮插件CodeColorer汉化升级版2012.5.27

    优化高亮代码显示方式,放弃Table布局,改用Div+CSS,兼容多种浏览器乃至IE6以及移动浏览器; 添加代码工具栏,实现一键复制等功能,同样兼容多种浏览器。 等待你们去发现…… 更新时间: 2012-5-27 13:58:36 演示...

    用Python设置Word文档里表格的格式.zip

    Python作为一个功能强大的编程语言,提供了诸如`python-docx`这样的库,使得我们能够方便地对Word文档进行读写和格式设置,包括修改表格的样式和内容。这个压缩包"用Python设置Word文档里表格的格式.zip"就是针对这...

    table insertRow、deleteRow定义和用法总结

    例如,调用`table.deleteRow(index)`会在指定行号的位置删除一行。如果`index`无效,也会抛出`INDEX_SIZE_ERR` DOMException异常。以下代码演示了如何删除表格的第一行: ```html function delRow() { document...

    Oracle学习(比较齐全的介绍)

    它提供了强大的功能来管理数据,包括数据的查询、更新、删除等。 #### 二、什么是数据库 数据库是组织、存储和处理数据的系统。它可以被视为一种数据容器,用于存储各种类型的数据,并提供对这些数据的安全访问方式...

    oracle常用的sql语句

    #### 十七、添加、修改和删除 数据操纵语言(DML)用于插入、更新和删除数据。 ##### 17.1 insert 向表中插入新行,例如:`INSERT INTO table_name (column_name1, column_name2) VALUES (value1, value2);`。 #####...

    用js驱动产生条纹式表格

    3. **设置样式**:对于每行,我们可以检查其行号(在JavaScript中,数组索引从0开始,所以奇数行是索引0, 2, 4...,偶数行是1, 3, 5...),并根据行号应用不同的背景色。这可以通过修改`style.backgroundColor`属性...

    VS2008操作WPS文档 往文档中加入文字 图片 表格

    WPS,全称“Writer Perfect Suite”,是一款由金山软件开发的办公软件套件,其功能与微软的Office类似,提供了文本处理、电子表格和演示文稿制作等工具。 首先,我们需要了解WPS提供的API或封装类。WPS通常会为...

    基于react-window 库编写的一个超灵活的表格源码+项目说明.zip

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    HTML代码在txt里面

    - 定义了`jspxUtil`函数,该函数接收三个参数:当前操作的元素对象、当前行号以及最大行号。 - 通过`obj.value`获取当前输入框的值,并进行一系列逻辑判断与处理。 - 根据输入的值,动态调整表格行的顺序。 3. *...

    Oracle学习笔记.doc

    - 增删改约束: 使用`ALTER TABLE`命令来添加或删除约束。 - 删除表: `DROP TABLE table_name;`. #### 十六、索引 - **索引**可以提高查询性能。 - 建立索引: `CREATE INDEX index_name ON table_name (column_...

    数据库中表的一些操作

    这段代码演示了如何通过自定义渲染器设置偶数行和奇数行的背景色,以及如何设置行高。 以上是关于数据库表操作的详细知识点,包括表格的创建、动态填充、行的增删改查、禁止编辑、设置列宽及行高等操作。通过这些...

    jquery-treetable插件demo 下载

    - **灵活的结构**:jQuery Treetable支持将任意的表格转化为树形结构,只需添加特定的类名或属性到表格元素中。 - **可展开/折叠**:每个行可以是树结构的一个节点,通过点击行头可以展开或折叠其子节点,便于查看和...

    全面讲解SQL 培训资料

    SQL(Structured Query Language,结构化查询语言)是用于管理和处理关系型数据库的强大工具,它允许用户执行各种操作,如查询、插入、更新和删除数据,以及创建和管理数据库对象。全面学习SQL,需要掌握以下几个...

    C#实现导入CSV文件到Excel工作簿的方法

    值得注意的是,QueryTable的RefreshStyle属性设置为xlInsertDeleteCells,意味着在刷新数据时,新数据将取代旧数据,同时删除原有的数据单元格。此外,如果autoFitColumns参数为true,则会在数据导入完成后自动调整...

    Excel数据表实现动态小计.rar

    本例中的"Excel数据表实现动态小计.rar"文件提供了一个技巧207 数据表实现动态小计.xls的工作簿,它展示了如何利用Excel的表格(Table)功能和聚合函数来实现动态小计。下面将详细解释这一方法: 1. **创建Excel...

    matlab开发-TableBreakpointOptimization.zip

    10. **文档与教程**:通常,这样的压缩包会包含详细的文档和教程,帮助学习者理解如何设置和使用TableBreakpointOptimization,包括MATLAB脚本、M文件的注释和解释,以及可能的演示文稿或教学视频。 综上所述,...

Global site tag (gtag.js) - Google Analytics