Java 多个 Table 带有复选框的模型相互干扰
Java Multiple Table Models with CheckBoxes Interfering with each other
我有一个函数可以创建一个使用复选框的通用 TabelModel。但是,当我多次调用此方法时,我发现来自两个 table 的复选框相互干扰(单击一个 table,另一个 table 也单击)。
什么可能导致引用相互冲突?
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 也对此做出反应。不知何故,复选框变得纠缠在一起。为什么会这样?
字段 'data' 填充了完全相同的对象,在本例中是一个地图。数据只是一个对象,它包含此模型包含的任何数据。 MadProgrammer 是正确的,数据正在共享,解决方案是将数据加载到 table 单独的
我有一个函数可以创建一个使用复选框的通用 TabelModel。但是,当我多次调用此方法时,我发现来自两个 table 的复选框相互干扰(单击一个 table,另一个 table 也单击)。
什么可能导致引用相互冲突?
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 也对此做出反应。不知何故,复选框变得纠缠在一起。为什么会这样?
字段 'data' 填充了完全相同的对象,在本例中是一个地图。数据只是一个对象,它包含此模型包含的任何数据。 MadProgrammer 是正确的,数据正在共享,解决方案是将数据加载到 table 单独的