2017-08-11 63 views
0

我很难理解cellrenderer并找到指定问题的解决方案。 我想在选中时专门给单元格着色,然后单击一个按钮,然后让程序提醒哪些单元格已经着色,哪些不是。因此,如果我为其中一个颜色着色,则应该在其余时间保持颜色,直到新游戏开始。 我的确有它可以给单元格着色,但我无法弄清楚如何使jTable保持着色的颜色。如何选择一个新的彩色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; 
} 
} 

}

回答

0

我不知道如何使jTable保持着色的颜色。

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

那么你的渲染代码就变成了:

//if (isSelected) { 

Boolean colored = (Boolean)value; 

if (colored) { 
    ... 
+0

如何在模型中将Boolean.FALSE作为默认值存储? –

+0

那么,你需要存储一个自定义对象,而不是只存储一个字符串(如2,3,4 ...)在TableModel中。该对象将包含两个属性1)字符串2)布尔值。然后,渲染器只从对象中获取两个值,然后根据数据渲染对象。 – camickr

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

这使得多选

+0

应该说是放置在按钮操作执行类? –

+0

这可以在您使用的JTable上进行多选。 –

相关问题