jtable上的复选框以及获取java swing中相应行的值

时间:2011-08-03 18:39:41

标签: java swing jtable jcheckbox

我在JTable中添加了复选框。我想获取所选JCheckBox行的特定单元格的值。添加复选框代码就像

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); 
                   //}    

                }
            }); 

我不明白为什么它第一次打印为空,之后会打印2次。

2 个答案:

答案 0 :(得分:2)

无需创建和分配自定义编辑器。 JTable将根据getColumnClass(,..)方法返回的类返回相应的渲染器和编辑器。复选框会自动用于Boolean数据。

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

答案 1 :(得分:1)

在单击任何单元格之前,该字段中的值为null(我没有看到您在示例代码中为表格设置任何内容)

在检查单元格中的复选框后,它现在将具有由复选框设置的显式真值。

再次点击后,它将有一个显式设置的空值,由复选框设置。