java - TableCellRenderer 工作正常,表格排序正常,但不会重新绘制
问题描述
这是我的JTable
鼠标监听器,我把它放在表中,因为我希望它直接排序。
myTable= new JTable();
myTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
if( myTable.getRowCount()!= 0) {
TableRowSorter<TableModel> sorter = new TableRowSorter(myTable.getModel());
myTable.setRowSorter(sorter);
List<RowSorter.SortKey> date= new ArrayList<>();
int columnIndexToSort = 10;
datum.add(new RowSorter.SortKey(columnIndexToSort, SortOrder.DESCENDING));
sorter.setSortKeys(date);
sorter.sort();
}
myTable.repaint();
myTable.revalidate();
}
});
这是 BTW 的单元格渲染器,效果很好,但排序后不会重新绘制:
public class MyTableRenderer extends DefaultTableCellRenderer{
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
Object resault = table.getModel().getValueAt(row, 9);
int value= Integer.parseInt(resault.toString());
Color color = null;
if (value>= 5000) {
c.setBackground(new Color(144, 238, 144));
}else if (value< 5000 && value>=500) {
color = Color.ORANGE;
c.setBackground(color);
}else if (value>= 0 && value<500) {
c.setBackground( new Color(255, 76, 76));
}
c.setFont(c.getFont().deriveFont(Font.BOLD));
return c;
}
}
这些是我记得要说的关于这个特定问题的一些事情,如果有任何无法理解的地方,所以我会得到答案,请询问。
解决方案
Object resault = table.getModel().getValueAt(row, 9);
渲染器在表格视图中显示数据。当您对数据进行排序时,TableModel 中的数据不会更改,只会更改视图中数据的顺序。
所以你应该使用:
Object result = table.getValueAt(row, 9);
在当前视图中获取已排序的数据。
推荐阅读
- blazor - 使用现有 Blazor 服务器作为 Blazor WASM 后端
- midi - 有没有办法在 winmm 中使用自定义声音字体/声音库?
- python - python - 财务 - EOF 错误 - 输入不足
- javascript - Discord.js 无法从公会中找到角色
- django - 为模型更改表单视图设置自定义工作流程
- python - 了解循环旋转代码挑战?
- c# - 从 HttpResponseMessage 获取对象并使用 MethodInfo.Invoke() 调用方法
- python - ImportError:即使我安装了 google-cloud,也无法导入名称“类型”
- python - 我们有一千多个变量。但是我们无法计算那么多变量。那么 Python 中有没有一个函数可以说我们有多少变量?
- python - 如果 x[1] == x[1] 在相邻数组中,则对 python 中的数组数组进行子排序