我有两个JTables,它们共享一个TableModel。
这样,我就可以在滚动窗格中设置它们,使其中一个列显示在左边,而不是横向滚动,视觉上“冻结”这些列,而另一个列包含其余的列。
它们的排序总是相同的,这样行就匹配起来了。这是使用RowSorter侦听器完成的,如下所示。(frozenTable和tableView是我JTables的名字)。
RowSorterListener rowSorterListener = new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent e) {
if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
RowSorter source = e.getSource();
if (source == tableView.getRowSorter()) {
frozenTable.getRowSorter().removeRowSorterListener(this);
frozenTable.getRowSorter().setSortKeys(source.getSortKeys());
frozenTable.getRowSorter().addRowSorterListener(this);
} else {
tableView.getRowSorter().removeRowSorterListener(this);
tableView.getRowSorter().setSortKeys(source.getSortKeys());
tableView.getRowSorter().addRowSorterListener(this);
}
}
}
};在我的代码中的另一点上,我希望能够获得当前正在排序的TableColumn对象。在添加“可冻结”之前,我可以使用以下代码完成此操作:
List<? extends SortKey> sortKeys = tableView.getRowSorter().getSortKeys();
for(SortKey key : sortKeys){
TableColumn column = tableView.getColumnModel().getColumn(key.getColumn());
// other stuff in the loop
}似乎SortKey中只有两样东西,一种是列索引,一种是SortOrder。这就提出了两个问题:
发布于 2017-09-18 19:58:24
查看固定列表,它是一个可重用的类,允许您在两个表之间共享一个模型。
创建固定列表的代码是:
JTable table = new JTable(...);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scrollPane= new JScrollPane( table );
FixedColumnTable fct = new FixedColumnTable(2, scrollPane);
JTable fixed = fct.getFixedTable();我觉得你不需要听分类器。
您应该能够使用如下代码来共享RowSorter:
table.setAutoCreateRowSorter(true);
fixed.setRowSorter(table.getRowSorter());
table.setUpdateSelectionOnSort(true);
fixed.setUpdateSelectionOnSort(false);https://stackoverflow.com/questions/46282697
复制相似问题