Mehrere CheckBoxen im TableModel wechselseitig ausschließen

Status
Nicht offen für weitere Antworten.

Dust80

Mitglied
Hallo.

Ich hab folgendes Problem:

Ich habe einen JTable mit eigenem TableModel (programmiert wie in der FAQ)

Dort habe ich nun mehrere CheckBoxen, wovon sich 2 gegenseitig ausschließen sollen, sprich wenn die eine aktiviert wird soll die andere deaktiviert sein.

Code:
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
	Row row = (Row) rows.get(rowIndex);
	if (columnIndex == 5 && (Boolean)aValue)
	{
		row.setValueAt(6, false);
	}
	if (columnIndex == 6 && (Boolean)aValue)
	{
		row.setValueAt(5, false);
	}
	row.setValueAt(columnIndex, aValue);
}

Die Werte an sich werden auch geändert, aber das JTable zeigt die Änderung nicht an.

Ist das an sich der richtige Ansatz oder geht das auch noch anders? Und was muß ich tun damit der JTable mitkriegt dass sich Werte geändert haben.

Mit
Code:
	this.fireTableDataChanged();
	this.fireTableRowsUpdated(rowIndex, rowIndex);
	this.fireTableCellUpdated(rowIndex, 6);

funktionierts auf jeden Fall schonmal nicht....
 
Hmm, also ich hab auch ein eigenes TableModel geschrieben.... Der gesamte Code ist aber zu lang, ich versuche Morgen mal es auseinander zu pflücken. Aber schonmal danke fürs ausprobieren. Muß ich dem JTable vielleicht noch irgendeinen Listener anhängen?
 
Allgemein macht man sich gegenseitig ausschließende Buttons (also auch Checkboxes) mit einer ButtonGroup. Ob das auch für deinen Fall, im JTabel, anwendbar ist, kansnt du ja mal schauen...
 
@Marco

Ja, das weiß ich, aber die CheckBoxen werden im Table ja als CheckBox dargestellt weil die Spalte vom Typ Boolean ist....
 
Für alle die das gleiche Problem haben:

Man muß allen Listenern bescheid sagen dass sich was geändert hat.

Also hier der Code für die Methode:

Code:
	public void setValueAt(Object aValue, int rowIndex, int columnIndex)
	{
		Row row = rows.get(rowIndex);
		if (columnIndex == 8 && (Boolean) aValue)
		{
			row.setValueAt(9, false);
		}
		if (columnIndex == 9 && (Boolean) aValue)
		{
			row.setValueAt(8, false);
		}
		row.setValueAt(columnIndex, aValue);
		TableModelEvent e = new TableModelEvent(this, rowIndex, rowIndex, TableModelEvent.ALL_COLUMNS, TableModelEvent.UPDATE);
		for (int i = 0, n = listeners.size(); i < n; i++)
		{
			((TableModelListener) listeners.get(i)).tableChanged(e);
		}
	}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben