我在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次。
答案 0 :(得分:2)
无需创建和分配自定义编辑器。 JTable将根据getColumnClass(,..)
方法返回的类返回相应的渲染器和编辑器。复选框会自动用于Boolean
数据。
ListSelectionListener触发两个事件,一个用于取消选择先前选定的行,另一个用于选择当前行。
答案 1 :(得分:1)
在单击任何单元格之前,该字段中的值为null(我没有看到您在示例代码中为表格设置任何内容)
在检查单元格中的复选框后,它现在将具有由复选框设置的显式真值。
再次点击后,它将有一个显式设置的空值,由复选框设置。