【发布时间】:2016-02-14 11:43:27
【问题描述】:
我有一个 JTable,我想对其应用两个 prepareRenderer 方法,但我不确定如何同时应用这两个方法。
JTable table = new JTable(model){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column){
Component returnComp = super.prepareRenderer(renderer, row, column);
Color alternateColor = new Color(241, 243, 247);
Color whiteColor = Color.WHITE;
if (!returnComp.getBackground().equals(getSelectionBackground())){
Color bg = (row % 2 == 0 ? alternateColor : whiteColor);
returnComp .setBackground(bg);
bg = null;
}
return returnComp;
}
public Component prepareRenderer2(TableCellRenderer renderer, int rowIndex,
int columnIndex) {
JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex);
if(Double.parseDouble(getValueAt(rowIndex, 0).toString()) > (Double.parseDouble(rollReq.getText())) && columnIndex == 6) {
component.setBackground(Color.RED);
} else if(Double.parseDouble(getValueAt(rowIndex, 0).toString()) > (Double.parseDouble(rollReq.getText())) && columnIndex == 6){
component.setBackground(Color.GREEN);
}
return component;
}
};`
第一个是将一行设为白色,将下一行设为灰色,以便于阅读。第二个是根据列的值更改列的单元格颜色。
任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
这被称为“糖果剥离”(和其他一些),
prepareRenderer是一个糟糕的选择来实现它(恕我直言),因为它可能会覆盖渲染器可能一直在尝试的任何逻辑劝说(我只是不喜欢它:P)。你可以看看this alternative -
如果您对这种情况不感兴趣,请从第一种方法中调用第二种方法。
prepareRenderer由 API 调用,因此这是入口点,然后您可以根据需要调用prepareRowRenderer后跟prepareColumnRenderer或反之亦然 -
@MadProgrammer 我尝试将第二种方法命名为“prepareColumnRenderer”并运行它,但没有运气
-
你真的叫过它吗?
-
@MadProgrammer 是的,我打电话给
table.getColumnModel().getColumn(6).setCellRenderer(new CustomRenderer());
标签: java swing colors jtable tablecellrenderer