我在我的 jTable 中实现了用于排序列的图标。我有一个查找结果的按钮,并且在启动工作程序时实现了默认排序。像这样 :
public void refreshStripedViewTable(final List<FlightBox> boxList,
final List<FlightBoxModel> boxesModels, final String sortBy) {
if (boxList != null && !boxList.isEmpty()) {
stripedViewTableModel.setContent(boxesModels);
tableRenderer.setStripedViewModelList(boxesModels);
final RowSorter<? extends TableModel> sorter = tableFacade
.getTooltipsTable().getRowSorter();
if (sorter != null) {
List<SortKey> sortKeys = new ArrayList<SortKey>();
javax.swing.RowSorter.SortKey sk = new SortKey(getColumnIndex(
sortBy, tableFacade.getTooltipsTable()),
SortOrder.ASCENDING);
sortKeys.add(sk);
sorter.setSortKeys(sortKeys);
tableFacade.getTooltipsTable().setRowSorter(sorter);
tableFacade.getTooltipsTable().validate();
tableFacade.getTooltipsTable().getModelTable()
.fireTableDataChanged();
}
}
}
当用户单击我的 JTable 上的标题时,我为 setIcon 添加了一个渲染器。
public Component getTableCellRendererComponent(final JTable table,
final Object value, final boolean isSelected, final boolean hasFocus,
final int row, final int column) {
setIcon(null);
super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
setOpaque(false);
setForeground(Color.white);
final RowSorter<?> sorter = table.getRowSorter();
if (sorter != null) {
java.util.List<? extends javax.swing.RowSorter.SortKey> sortKeys = sorter
.getSortKeys();
if (sortKeys.size() > 0) {
javax.swing.RowSorter.SortKey sk = sortKeys.get(0);
// take in account if the user moves the column
if (column == table.convertColumnIndexToView(sk.getColumn())) {
Icon icon = null;
if (sk.getSortOrder() == SortOrder.ASCENDING) {
icon = iconService
.getRessourceIcon(MediaHmiService.TABLE_SORT_ORDER_ASCENDING);
} else if (sk.getSortOrder() == SortOrder.DESCENDING) {
icon = iconService
.getRessourceIcon(MediaHmiService.TABLE_SORT_ORDER_DESCENDING);
}
setIcon(icon);
}
}
}
setHorizontalTextPosition(SwingConstants.LEFT);
return this;
}
执行此操作时遇到问题:-找到结果->在默认列排序上设置图标确定-单击标题以设置图标确定-重新启动搜索-->图标不可见。KO 我的渲染器没有 sortKeys但我在我的方法 refreshStripedViewTable() 中设置了 rowSorter。我不明白为什么......
谢谢大家帮助。问候。