【发布时间】:2017-05-28 03:21:38
【问题描述】:
我有一个函数可以创建一个使用复选框的通用 TabelModel。但是,当我多次调用此方法时,我发现两个表中的 CheckBox 相互干扰(单击一个表,另一个表也单击)。
什么可能导致引用相互冲突?
private TableModel<Map<String, Object>> createModel() {
List<Map<String, Object>> list = new ArrayList<>();
TableModel<Map<String, Object>> model = new TableModel<Map<String, Object>>( list,
Arrays.asList( "Name", "Enabled" ),
Arrays.asList( "Enabled" ), null ) {
@Override
public Object getValueAt( int row, int column ) {
final Map<String, Object> object = data.get( row );
return object.get( columnNames.get( column ) );
}
@Override
public Class<?> getColumnClass( int col ) {
if ( col == 1 ) {
return Boolean.class;
}
return super.getColumnClass( col );
}
@Override
public void setValueAt( Object aValue, int row, int column ) {
final Map<String, Object> object = data.get( row );
object.put( columnNames.get( column ), aValue );
fireTableCellUpdated( row, column );
}
};
return model;
}
JTable tableA = new JTable ( createModel());
JTable tableB = new JTable ( createModel());
即使 tableA 和 tableB 使用两个不同的模型(或者是吗?),当我单击 tableA 中的复选框时,tableB 也会对其做出反应。不知何故,复选框变得纠缠不清。为什么会这样?
【问题讨论】:
-
如果这是我的问题并且我在这里提出的问题,我要做的第一件事就是创建并发布一个有效的minimal reproducible example 并附上我的问题,因为我知道这将是让人们充分了解我的问题并为我提供帮助的最好和最快的方法。
-
data是什么?这似乎是一个共享资源,因此两个表将使用相同的data源... -
@MadProgrammer 嗯....这可能是共享资源。可能需要重做“getValueAt”方法
-
或者复制
data并传递给create方法..
标签: java swing checkbox jtable tablemodel