1、创建一个简单的Table
JTable table = new JTable(data, columnNames);
其中data和columnNames是两个数组,分贝代表表头和表中的数据。
下面是JTable的两个常用构造器:
JTable(Object[][] rowData, Object[] columnNames)
JTable(Vector rowData, Vector columnNames)
这两个构造器虽然简单,但有很多缺陷:
(1)每个单元格可编辑;
(2)把所有的数据类型都当做String型。
(3)静态的绑定数据,在初始化时就要求绑定所有数据,不适合在运行时从数据库导入数据的需求。
2、将Table加入容器
JScrollPane scrollPane = new JScrollPane(table);
table.setFillsViewportHeight(true); //使用容器全部高度
JScrollPane将表头始终报纸在容器上方,如果不想用JScrollPane作为容器,必须获得TableHeader对象,并且自己将其放置到容器中。
container.setLayout(new BorderLayout());
container.add(table.getTableHeader(), BorderLayout.PAGE_START);
container.add(table, BorderLayout.CENTER);
3、设置和改变列宽
TableColumn column = null;
for (int i = 0; i < 5; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //third column is bigger
} else {
column.setPreferredWidth(50);
}
}
4、用户选择
可以通过JTable.setSelectionMode方法设置选择方式,该方法包含以下参数:MULTIPLE_INTERVAL_SELECTION, SINGLE_INTERVAL_SELECTION, and SINGLE_SELECTION,分别代表不连续多选,连续多选,单选。
还有几个和选择行为有关的方法:setRowSelectionAllowed,setColumnSelectionAllowed,setCellSelectionEnabled。
获得当前选择的行或列:JTable.getSelectedRows JTable.getSelectedColumns,返回选中的行号或列号组成的数组。
如果要获得lead selection的坐标:
String.format("Lead Selection: %d, %d. ",
table.getSelectionModel().getLeadSelectionIndex(),
table.getColumnModel().getSelectionModel().getLeadSelectionIndex());
用户选择会引起一系列的Selection Event发生,如对这些事件感兴趣,可以注册list selection listener进行监听。
5、创建一个TableModel
所有的TableModel对象,必须实现TableModel接口。如果编程者没有显示的提供TableModel,JTable会自动创建一个DefualtTableModel的实例。一般来说,编程者并不直接通过实现TableModel接口来创建model,可以简单的继承AbastractTableModel,这样会省好多事。
new AbstractTableModel() {
public String getColumnName(int col) {
return columnNames[col].toString();
}
public int getRowCount() { return rowData.length; }
public int getColumnCount() { return columnNames.length; }
public Object getValueAt(int row, int col) {
return rowData[row][col];
}
public boolean isCellEditable(int row, int col)
{ return true; }
public void setValueAt(Object value, int row, int col) {
rowData[row][col] = value;
fireTableCellUpdated(row, col);
}
}//可以将数据保存在一个数组中、Vector中、Hashmap中、或是数据库中。
6、监听数据变化
通过注册TableModelListener,来监听数据变化。
public class SimpleTableDemo ... implements TableModelListener {
...
public SimpleTableDemo() {
...
table.getModel().addTableModelListener(this);
...
}
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
...// Do something with the data...
}
...
}
7、发出数据变化事件
为了发出数据变化事件,model必须知道如何构建TableModelEvent 对象,这是一个非常复杂的过程,但是已经被DefaultTableModel所实现。如果有些场合DefaultTableModel并不适合,可以考虑AbstractTableModel,该model已经简单实现事件发送的框架。当数据发生变化时,显示调用以下方法:
Method
Change
fireTableCellUpdated |
Update of specified cell. |
fireTableRowsUpdated |
Update of specified rows |
fireTableDataChanged |
Update of entire table (data only). |
fireTableRowsInserted |
New rows inserted. |
fireTableRowsDeleted |
Existing rows Deleted |
fireTableStructureChanged |
Invalidate entire table, both data and structure |
8、Editor和Render
cell render用来显示各单元的内容(通常render的类型和单元格数据类型绑定),cell editor用来编辑单元格数据。比如,对于包含整数的单元格,会使用JLabel作为其render,而是用JTextField作为其editor。
为了决定某列的一个单元格改用何种render,table首先检查你是否显示为该列设置了render,如没有就调用model的getColumnClass方法获得单元格的数据类型,然后会根据数据类型寻找与其绑定的render。通常如下:
Boolean
— rendered with a check box.
Number
— rendered by a right-aligned label.
Double
, Float
— same as Number
, but the object-to-text translation is performed by a NumberFormat
instance (using the default number format for the current locale).
Date
— rendered by a label, with the object-to-text translation performed by a DateFormat
instance (using a short style for the date and time).
ImageIcon
, Icon
— rendered by a centered label.
Object
— rendered by a label that displays the object's string value.
editor也是通过如此方法选择的。
注意render并不控制事件,如果想捕获和table相关的事件:
Situation
How to Get Events
To detect events from a cell that is being edited... |
Use the cell editor (or register a listener on the cell editor). |
To detect row/column/cell selections and deselections... |
Use a selection listener as described in Detecting User Selections. |
To detect mouse events on a column header... |
Register the appropriate type of mouse listener on the table's JTableHeader object. (See TableSorter.java for an example.) |
To detect other events... |
Register the appropriate listener |
9、自定render
(1)创建DefaultTableCellRenderer的子类,如果DefaultTableCellRenderer不满足要求,创建一个其他类的子类并实现TableCellRender接口
(2)通过JTable的setDefaultRenderer方法,设置与特定数据类型相关的render;通过TableColumn的setCellRenderer,设置某列的render;通过创建JTable的子类,重写getCellRenderer方法,设置某个单元格的render。
10、使用Combobox作为editor
JComboBox comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Chasing toddlers");
comboBox.addItem("Speed reading");
comboBox.addItem("Teaching high school");
comboBox.addItem("None");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
分享到:
相关推荐
JTable使用 JTable使用JTable使用JTable使用
使用JTable显示数据查询的数据集 包含数据库连接
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
深入学会如何使用jTable,详细了解jTable表格如何设置,以便更加美观
类中使用JTable 实现了对JTable中行级的增删改 JFrame为自主布局,设置了背景图片以及窗口图标 有详细注释 例如: TableModel tableModel = jTable1.getModel(); DefaultTableModel dtm = (DefaultTableModel) ...
swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...
mvc下使用jtable插件
本资源提供了一个使用JTable编写的GUI学生对象管理系统的示例。通过该示例,您可以学习如何使用Java Swing库中的JTable组件来展示和管理学生对象的数据。适用于Java开发者和学习者,尤其是对GUI编程和数据管理有兴趣...
我今年夏天用Java设计的一个小软件可以练习我的编码并学习如何使用JTable。 我为父母设计了密码,这样他们就可以轻松存储密码。 用户输入网站/应用程序的名称,其登录名和密码。 应用程序将其存储在文件中。 这...
jtable使用方法介绍,很专业,内容详细,蛮有用。
使用jTable,SignalR和ASP.NET MVC的实时异步网页
关于界面的演示,学会JTable的使用!
电影简单的电影数据库应用程序。 使用 JTable GUI 组件显示来自 Derby 数据库的数据 Custom TableModel 处理在 GUI 中显示来自表的数据。
广告招标系统应用 广告投标系统应用程序(Java,OO设计)09/2013-12/2013•使用... •使用JTable,JTree,JFree-Charts,与用户个人资料,公司工作场所,广告发布者工作场所和广告竞标结果报告相关的页面构建增强的UI。
JTable的显示效果
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
此例子给出了JAVA中JTable使用的例子,列表可显示滚动条。
这个应用程序允许我们使用 AJAX、jTable、servlets 和 JSP 管理学生信息。 在本地获取 Ajax_Crud_jTable_Servlet git clone https://github.com/DayleChettiar/Ajax_Crud_jTable_Servlet.git 从命令行运行“create...