2011-08-03 36 views
1

我JTable.I添加复选框想选择JCheckBox的rows.adding复选框代码的特定细胞的值是像复选框上的相应行的JTable和获取值的Java Swing

JCheckBox checkBox = new javax.swing.JCheckBox(); 
jTable1 = new javax.swing.JTable(); 

jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] { }, 
new String [] { 
    "Station", "OperationName", "TliScantime", "StartTime", "Completedtime", "TliScanTime-StartTime", "StartTime-CompletedTime", "Select" 
} 
) { 
Class[] types = new Class [] { 
    java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class 
}; 

public Class getColumnClass(int columnIndex) { 
    return types [columnIndex]; 
} 
}); 
jTable1.getColumn("Select").setCellEditor(new DefaultCellEditor(checkBox)); 
在NetBeans

我使用addListSelectionListener为用户点击的JTable JCheckBox的细胞。

jTable1.getSelectionModel().addListSelectionListener(new javax.swing.event.ListSelectionListener() { 
        public void valueChanged(ListSelectionEvent event) { 
        // if(jTable1.getValueAt(0,7).equals(true)){ 
         Object b=jTable1.getValueAt(0,7); 

         System.out.println(b); 
        //}  

       } 
      }); 

我DONOT明白为什么它是在第一次印刷空之后,它会打印值的2倍。

回答

1

之前点击任何单元格,在字段中的值是零(我没有看到你设置的示例代码的任何内容到你的表)

检查电池的复选框之后,它现在将有一个由复选框设置的明确的真实值。

再次点击它后,就会有一个明确设置空值,通过复选框设置。

2

没有必要创建和分配一个自定义编辑器。 JTable中会返回基于从getColumnClass(,..)方法返回的类适当的渲染器和编辑器。一个复选框自动用于Boolean数据。

甲ListSelectionListener触发两个事件,一个用于先前选择的行的取消选择,一个用于选择当前行。