java JTable监听排序
时间: 2023-07-01 13:21:38 浏览: 116
要监听JTable的排序事件,可以通过添加TableModelListener和TableRowSorter的实现来实现。以下是一个简单的示例代码:
```java
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.util.ArrayList;
import java.util.List;
public class JTableSortListenerExample extends JFrame {
private JTable table;
private DefaultTableModel model;
public JTableSortListenerExample() {
setTitle("JTable Sort Listener Example");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
// 创建表格模型及表格
model = new DefaultTableModel();
model.addColumn("ID");
model.addColumn("Name");
model.addColumn("Age");
table = new JTable(model);
// 创建表格排序器
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(model);
table.setRowSorter(sorter);
// 添加表格模型的监听器
model.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
// 判断是否是排序事件
if (e.getType() == TableModelEvent.HEADER_ROW) {
System.out.println("Table sorted by column " + table.convertColumnIndexToModel(sorter.getSortedColumns()[0]));
}
}
});
// 初始化数据
List<Object[]> data = new ArrayList<>();
data.add(new Object[]{"1", "Alice", "18"});
data.add(new Object[]{"2", "Bob", "20"});
data.add(new Object[]{"3", "Charlie", "22"});
data.add(new Object[]{"4", "Dave", "24"});
data.add(new Object[]{"5", "Eve", "26"});
// 添加数据到表格模型
for (Object[] row : data) {
model.addRow(row);
}
// 添加表格到窗口
add(new JScrollPane(table));
setVisible(true);
}
public static void main(String[] args) {
new JTableSortListenerExample();
}
}
```
在上面的代码中,我们创建了一个JTable并添加了一个表格模型的监听器,用于监听表格排序事件。当表格按照某一列排序时,控制台会输出该列的索引(从0开始)。需要注意的是,我们使用了table.convertColumnIndexToModel()方法将视图中的列索引转换为模型中的列索引。
另外,我们还创建了一个TableRowSorter对象,并将其设置为JTable的排序器。这样,当用户点击表头时,JTable会自动按照该列进行排序。
阅读全文