2013-08-26 36 views
-1

在此代码中,我将添加数据库中的数据。我想用标签设置单元格渲染器。但是如果我运行这个代码,我只有复选框。想要获得带有标签的复选框

try { 
     List<Group> listgrChild = grMgmtModel.performList(); 

     for (final Group group : listgrChild) { 
      table.getColumnModel().getColumn(0) 
        .setCellRenderer(new TableCellRenderer() { 
         // the method gives the component like whome the 
         // cell must 
         // be rendered 
         public Component getTableCellRendererComponent(
           JTable table, Object value, 
           boolean isSelected, boolean isFocused, 
           int row, int col) { 
          boolean marked = new Boolean(String 
            .valueOf(value)); 
          JCheckBox rendererComponent = new JCheckBox(); 
          if (marked) { 
           rendererComponent.setSelected(true); 
          } 
          return rendererComponent; 
         } 
        }); 
      tbModel.addRow(new Object[] { group.getGroupName() }); 
     } 
+0

你的意思是'rendererComponent.setText(“Hello world”)'? –

+1

您会发现这样做效率很低,并会导致JM在短时间内重复分配大量内存。相反,只需创建一次复选框并不断更改其属性 – MadProgrammer

+0

renderComponent.setText(“Hello”);只给最后的价值。在2次 – RSST

回答

1

您评论“renderComponent.setText("Hello")只给出最后一个值”。

确认您的TableModel对每个行的复选框状态和标签值都有单独的存储空间。在这种example,类Value保持相关数据:

private static class Value implements Comparable<Value> { 
    private Boolean selected; 
    private Double value; 
    … 
} 

相应TableModel管理一个List<Value>和所需renderer and editor从每个Value实例相应地使用的数据。顺便说一句,Value实现Comparable接口为方便sorting