Использование con.setHorizontalSpan(2); выдает IllegalArgumentException при попытке обновить TableModel. Если я удалю эту строку кода, таблица обновится нормально; В основном мне нужно охватывать определенные ячейки и скрывать те ячейки, которые мне не нужно отображать, если я обновляю данные, диапазоны ячеек могут меняться в соответствии с новыми данными,
class MyTable extends AbstractTableModel {
public int getRowCount() {
return 3;
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public String getColumnName(int arg0) {
return arg0*10 + "";
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
return false;
}
@Override
public Object getValueAt(int arg0, int arg1) {
return ((arg0 * cst + arg1) % 10);
}
@Override
public void setValueAt(int arg0, int arg1, Object arg2) {
}
List<DataChangedListener> list = new ArrayList<DataChangedListener>();
@Override
public void addDataChangeListener(DataChangedListener arg0) {
list.add(arg0);
}
@Override
public void removeDataChangeListener(DataChangedListener arg0) {
list.remove(arg0);
}
public void update() {
for (int i = 0; i < 3; i++) {
for (int o = 0; o < 3; o++) {
for (DataChangedListener d : list) {
d.dataChanged(i, o);
}
}
}
}
}
public void testTable() {
MyTable tm = new MyTable();
current = new Form("Test");
Table b = new Table(tm) {
protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
TableLayout.Constraint con = super.createCellConstraint(value, row, column);
con.setHorizontalSpan(1);
if (value.toString().equals("1")) {
//IF I REMOVE THIS LINE< THE PROGRAM WORKS
con.setHorizontalSpan(2);
}
con.setWidthPercentage(100 / 3);
return con;
}
@Override
protected Component createCell(Object value, int row, int column, boolean editable) { // (1)
Label label = new Label();
System.err.println("c: " + column + " r: " + row);
if (column != 0) {
if (value.equals("2")) {
return label;
}
}
label.setText(value.toString());
return label;
}
};
Button bt = new Button("test");
bt.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
cst++;
tm.update();
}
}
);
current.setLayout(
new BoxLayout(BoxLayout.Y_AXIS));
current.add(bt);
current.add(b);
current.show();
}
Ошибка:
java.lang.IllegalArgumentException: Строка: 2 и столбец: 0 уже заняты [EDT] 0:0:26,270 - Исключение: java.lang.IllegalArgumentException - Строка: 2 и столбец: 0 уже заняты в com.codename1.ui.table. TableLayout.addLayoutComponent(TableLayout.java:931) в com.codename1.ui.table.TableLayout.removeLayoutComponent(TableLayout.java:1069) в com.codename1.ui.Container.removeComponentImplNoAnimationSafety(Container.java:1320) в com.codename1 .ui.Container.removeComponentImpl(Container.java:1309) в com.codename1.ui.Container.removeComponent(Container.java:1258) в com.codename1.ui.table.Table$Listener.dataChanged(Table.java:1013 ) в com.alhanah.samicalapp.SamiApplication$MyTable.update(SamiApplication.java:95)