gpt4 book ai didi

java - TableCellRenderer 工作正常,表格排序正常,但不重新绘制

转载 作者:行者123 更新时间:2023-11-30 06:04:17 24 4
gpt4 key购买 nike

这是我的 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();
}
});

这是单元格渲染器,顺便说一句,效果很好,但排序后它不会重新绘制:

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);

渲染器在 TableView 中显示数据。当您对数据进行排序时,TableModel 中的数据不会更改,只会更改 View 中数据的顺序。

所以你应该使用:

Object result = table.getValueAt(row, 9);

获取当前 View 中已排序的数据。

关于java - TableCellRenderer 工作正常,表格排序正常,但不重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51684645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com