2015-05-15 31 views
1

嗯,这是我第一篇文章。但我有点沮丧,因为我到处搜索,但没有任何工作。我有JTable和代码正常工作后如果(value.equals("CMAU1294522"))右下方行。但只有一个单元格是显示方形框。我点击了一个特定的行,我希望整行显示浅灰色(我认为这是标准)。JTable中的选定行不突出显示

table = new JTable(sorter) { 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int col) { 
     Component comp = super.prepareRenderer(renderer, row, col); 
     Object value = getModel().getValueAt(row, col); 


     UIManager.put("Table.editRow", new javax.swing.plaf.ColorUIResource(Color.YELLOW)); 


     if(editingRow ==1){ 
      table.setSelectionBackground(Color.red); 
     } 
     if (getSelectedRow() == row) { 
      table.setSelectionBackground(Color.red); 
     } 
     if (value.equals("CMAU1294522")) { 
      comp.setBackground(Color.red); 
     } else if (value.equals("PNCT")) { 
      comp.setBackground(Color.green); 
     } else if (NewJApplet.contReady.containsKey(value)) { 
      comp.setBackground(Color.CYAN); 
     } else if (NewJApplet.badCont.containsKey(value)) { 
      comp.setBackground(Color.red); 
     } else { 
      comp.setBackground(Color.white); 
     } 
     return comp; 
    } 

有没有办法做到这一点在prepareRenderer功能我已经有了?

回答

1

我有没有办法在PreparRenerere函数中执行它我已经有了?

你的代码得到的“值”是错误的。你总是得到正在渲染的当前单元格的值。如果你想突出基于特定值的整行,那么你需要硬编码列:

Object value = getModel().getValueAt(row, ???); 

此外,它看起来像你在表中对数据进行排序,所以你应该使用getValueAt(.. )而不是getModel()。getValueAt(),所以你检查排序表中的数据,而不是未排序模型中的数据。

查看Table Row Rendering中的示例代码以获取工作示例。

+0

谢谢。但它终于奏效了。我非常感谢你的帮助。 –

+0

@HiTech,很高兴帮助,不要忘记“接受”答案,通过点击复选标记,让人们知道问题已经解决。 – camickr