1

我在 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));

在网豆中。

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

                }
            }); 

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

4

2 回答 2

2

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

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

于 2011-08-03T20:03:49.647 回答
1

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

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

再次单击后,它将具有一个明确设置的空值,由复选框设置。

于 2011-08-03T18:44:32.487 回答