我正在尝试更改JTable单元格的颜色(前景)。它可以工作,但它显示的是cell+1,而不是所需的单元格(如您在我的代码中所见)。
我试图更改当前行和列3的颜色,但实际上它正在更改下一列的颜色。
此代码将添加到自定义代码中。
BaritemsTable = new javax.swing.JTable(){
@Override
public Component prepareRenderer (TableCellRenderer renderer, int rowIndex , int columnIndex ){
Component component = super.prepareRenderer(renderer , rowIndex , columnIndex );
Object value = getModel().getValueAt(rowIndex , columnIndex);
if (columnIndex == 3){
if (value.equals("Ready")){
BaritemsTable.setForeground(new java.awt.Color(51, 204, 0));
BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
}
if (value.equals("Process")){
BaritemsTable.setForeground(new java.awt.Color(51, 51, 255));
BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
}
if (value.equals("Queued")){
BaritemsTable.setForeground(new java.awt.Color(255, 0, 0));
BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
}
} else {
BaritemsTable.setForeground(new java.awt.Color(0, 0, 0));
BaritemsTable.setFont(new Font("Tahoma", Font.PLAIN, 48));
}
return component;
}
};发布于 2020-02-17 15:50:35
你代码中的第一个问题,肯定是:
Object value = getModel().getValueAt(rowIndex , columnIndex);您在JTable中的处理程序和侦听器、方法等中接收到的索引是视图索引,并且只能用于索引视图。换句话说,你应该写:
Object value = getValueAt(rowIndex , columnIndex); // Use JTable.getValueAt第二个问题:在prepareRenderer中直接引用列索引时,应该在该位置使用视图索引。你很可能需要
if (convertColumnIndexToModel(columnIndex) == 3)JTable.convertColumnIndexToModel确保您使用的是模型中的索引。为什么需要所有这些,什么是视图索引和模型索引?它们之间是如何关联的?我给了更多的解释,here。
第三个问题:如果要设置行/单元格的颜色和字体,则需要在从super.prepareRenderer返回的组件上设置它们,而不是在表上设置。例如:
if (value.equals("Ready")){
component.setForeground(new java.awt.Color(51, 204, 0));
component.setFont(new Font("Tahoma", Font.PLAIN, 48));
}https://stackoverflow.com/questions/60257213
复制相似问题