我有一个可排序的JTable设置来使用自定义扩展AbstractTableModel.但是,这个表的某些行为是我的预期,我希望得到一些关于如何解决这个问题的建议.
我将JTable设置为可排序使用:
thisJTable.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
这允许我按预期单击列标题对表进行排序.
但是,我发现当我通过单击列标题对表进行排序时,我的行的格式(背景和前景色)也没有排序.
我根据它们包含的值设置了这些行的颜色编码.当我按列标题排序时,给定行NUMBER的格式保持不变(尽管之前在该行中的内容已移动).
通过覆盖prepareRendererJTable 的默认调用来设置行的颜色:
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(row));
c.setForeground(thisModel.getRowForeColor(row));
return c;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有更好/不同的方法来解决这个问题?
我是否应该使用不同的方法来进行渲染,这种方法可以在排序中更新JTable的渲染?
或者我是否想要编写自己的排序方法?
解决方案(谢谢mKorbel!)
我以为我会发布我的解决方案,因为我不得不玩这个,因为我不确定新索引是否也会传递给prepareRenderer.
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public …Run Code Online (Sandbox Code Playgroud) 我有一个Jtable,第一列有一个复选框.我想在选中复选框时删除行的文本.(例如,当我们的任务完成时,就像我们在microsoft outlook中一样.)我尝试过使用AttributeString,但是无法做到.
有人可以指导我解决吗?
String strStrike;
AttributedString as;
public void setTextStrikeThrough() {
for(int r=0;r< taskcells.length;r++) {
if (ttable.getValueAt(r,0).equals(Boolean.TRUE)) {
for(int c=2;c<7;c++) {
strStrike+=taskcells[r][c-1];
}//end inner for as=new
AttributedString(strStrike);
as.addAttribute(TextAttribute.STRIKETHROUGH,
TextAttribute.STRIKETHROUGH_ON);
as.getIterator();
}//end if
}//end for
}
Run Code Online (Sandbox Code Playgroud)
我没准确到哪里调用这个方法.我想在检查该行的复选框时删除行的文本.