好的,我一直在尝试这个过去的露水时间,它变得无望。
所以我想将单元格渲染应用到第二列。
stockTable.setCellRender(jtSpread.getColumnModel().getColumn(1));
调用的方法是setCellRender,它具有以下代码:
public void setCellRender(TableColumn column)
{
column.setCellRenderer(new cellRenderer(data, rows));
}
我的CellRenderer类包含以下代码:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
for(int i = 0; i < rows; i++) {
if(row == i && column == 2) {
}
}
return this;
}
上述情况不完整,一团糟。我的目的是检查每个单元格的条件,如果为真,那么我将返回带有绿色前景的标签。如果为false,则返回前景为红色的标签。我想逐一检查列中的每个单元格,每个条件都特定于每个单元格。
编辑:关于具有其自身条件的每个单元,例如。第一个单元格的值为600,我想检查数组[0],如果数组[0]的内容更高,我希望单元格为绿色,否则为红色。
第二个单元格的值为626,我想检查数组[1],如果数组[1]的内容更高,我希望单元格为绿色,否则为红色。
我希望针对数组中的所有值继续列中的所有单元格
答案 0 :(得分:5)
确保您的渲染器扩展了DefaultTableCellRenderer:
CellRenderer extends DefaultTableCellRenderer {
...
然后,getTableCellRendererComponent()
可能看起来像这样(每次渲染单元格时都会调用此方法):
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cellComponent = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
cellComponent.setForeground(isMyConditionFullfilled(value) ? Color.GREEN : Color.RED);
return cellComponent;
}
答案 1 :(得分:1)
您的渲染类必须实现TableCellRender 在渲染类中尝试这个:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = new JLabel();
label.setOpaque(true);
if (value != null && value.equals("text")) { //Checking if cell´s values isnt null and the condition is true
label.setBackground(Color.GREEN);
}else{
label.setBackground(Color.RED);
}
return label;
}
渲染将自己检查每个单元格,告诉它如何渲染每个单元格。变量“value”包含每行的值,因此您可以使用它来检查条件。如果列的类型已定义,则转换变量“value”。 例如,如果您的单元格定义了Double类型:
double valDouble = (Double) value;
if (value != null && value == 5.00) { //Checking if cell´s values isnt null and the condition is true
label.setBackground(Color.GREEN);
}else{
label.setBackground(Color.RED);
}