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 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 首先,在使用 JTable ...
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示数据集。它是Swing的`javax....通过实践和研究提供的示例代码,你将能够熟练地在Java Swing应用中使用`JTable`来构建功能丰富的用户界面。
深入学习jTable的使用,能够帮助开发者创建用户友好的界面,使得数据的管理与展示更加直观高效。** ### jTable的基本结构与使用 jTable由`DefaultTableModel`类驱动,它负责存储表格的数据和列信息。创建一个jTable...
在"swing中JTable的简单使用"这个主题中,我们将深入探讨如何在Java Swing应用中有效地使用JTable。 首先,JTable是javax.swing.JTable类的实例,它是JFrame或JPanel等容器中的一个组件。JTable通常与TableModel...
在使用JTable时,我们需要将上述两个类组合起来使用。下面是一个简单的示例代码: ```java import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax....
下面我们将深入探讨JTable的使用方法和特性。 首先,JTable的类继承结构如下: 1. `java.lang.Object` 2. `java.awt.Component` 3. `java.awt.Container` 4. `javax.swing.JComponent` 5. `javax.swing.JTable` ...
使用JTable+TableModel可以轻松地将Java中的数据对象展示出来。例如,将一个JavaBean对象的属性展示在JTable中,只需要将JavaBean对象转换为TableModel接口的实现,然后将其传递给JTable组件。 4. JTable的美化 ...
可以直接使用 JTable 的无参构造函数创建一个空的表格控件,例如:`JTable table = new JTable();` 2. 以表头和表数据创建表格 可以使用表头和表数据创建一个 JTable,例如: ``` Object[][] cellData = {{"row1-...
3. **配置 jtable**:使用 JavaScript 配置 jtable 的各种参数,如字段名、标题、操作等。 4. **初始化 jtable**:调用 `$("#yourTableContainer").jtable()` 初始化表格,并传入之前配置的对象。 5. **服务器端交互...
该文件名为`TableDemo.java`,是一个演示如何使用JTable创建表格的应用程序。主要包含了以下几个部分: 1. **基础框架构建**:定义了JFrame类的继承,并初始化了一些组件。 2. **数据准备**:定义了一个二维数组...
通过这个过程,初学者可以学习到如何在Java Swing应用中使用JTable与数据库进行交互,这对于构建功能丰富的桌面应用至关重要。同时,这也是Java数据库编程的基础,有助于进一步学习更复杂的数据库操作和JDBC高级特性...
类中使用JTable 实现了对JTable中行级的增删改 JFrame为自主布局,设置了背景图片以及窗口图标 有详细注释 例如: TableModel tableModel = jTable1.getModel(); DefaultTableModel dtm = (DefaultTableModel) ...
在Java中,使用JTable显示数据库中的数据是一个常见的应用场景。首先,我们需要了解如何通过Java Database Connectivity (JDBC)来连接并查询数据库。 1. **加载JDBC驱动**: - 在示例代码中,`Class.forName("sun....
swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...
然而,在使用 JTable 时,开发者经常会遇到一些问题,例如如何设置表格的行高。 在 Java 中,JTable 的行高可以通过 setRowHeight() 方法来设置。这个方法将指定的行高应用于整个表格,但是有时候我们需要对不同的...
这篇文章可能涵盖了作者在理解和使用JTable过程中遇到的问题及解决方法。 描述中提到的链接指向了一篇ITEYE博客,但具体内容未给出。通常,这样的博客会包含作者的个人经验分享、问题分析、代码示例或者解决策略。...
在Java编程中,开发者可以使用JTable来创建动态、可编辑的数据视图,支持排序、过滤、行选择等功能。 首先,JTable的核心在于其数据模型,即TableModel。这个模型负责管理表格中的数据,包括数据的添加、删除和修改...