如何在选择新的彩色jTable单元后保持彩色?

时间:2017-08-11 12:42:24

标签: java swing jtable

我很难理解cellrenderer并找到指定问题的解决方案。 我想在选择时专门为单元格着色,然后单击一个按钮然后让程序提醒哪些单元格已经着色,哪些单元格不是。所以如果我给它上色,它应该在剩下的时间保持颜色,直到新的游戏开始。 我确实拥有它可以为单元格着色,但我无法弄清楚如何使jTable保持彩色单色。

我使用GUI在Netbeans中工作。这是我的第一次,我是首发,所以请温柔地对待我和我的代码。我确实已经阅读了渲染教程等等但找不到工作方式,或者我无法在我的小程序中使用它。

这是在initcomponents();

之后
jTableScoreFormulier.setDefaultRenderer(Object.class,new MyRenderer());

然后你得到这个部分来制作表格:

    jTableScoreFormulier.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"Rood", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"},
            {"Geel", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"},
            {"Groen", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2"},
            {"Blauw", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2"}
        },
        new String [] {
            "Kleur", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "Sluit"
        }
    ));

这是我的渲染器:

class MyRenderer implements TableCellRenderer {

public final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    Color foreground, background;
    if (isSelected) {
        foreground = Color.WHITE;
        background = Color.BLACK;
    }  else {
        foreground = Color.BLACK;
        background = Color.WHITE;
    }
    renderer.setForeground(foreground);
    renderer.setBackground(background);
    return renderer;
}
}

}

2 个答案:

答案 0 :(得分:0)

jTableScoreFormulier.setRowSelectionAllowed(true);
jTableScoreFormulier.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

这样可以进行多项选择

答案 1 :(得分:0)

  

我无法弄清楚如何使jTable保持彩色的颜色。

一种方法是将信息保存在TableModel中。因此,您可能只需在模型中存储Boolean.TRUE或Boolean.FALSE以指示选择了哪些单元格。所有单元格的默认值为Boolean.FALSE然后,当您单击单元格时,使用setValueAt(Boolean.TRUE, row, column)方法更新TableModel以更改选择。

然后您的渲染器代码变为:

//if (isSelected) {

Boolean colored = (Boolean)value;

if (colored) {
   ...