Problem mit TableCellEditor

fastfiler

Mitglied
Hi,

ich hab eine jTable mit 10 Spalten, die letzte davon beinhaltet bool'sche Werte die mittels einer JCheckBox dargestellt sind. Um den "haken" setzen und zurückzunehmen habe ich zusätzlich einen TableCellEditor implementiert. Es funktioniert auch - nur wird nicht nur der bool'sche Wert der aktuellen Celle geändert, sondern auch die der anderen. Ich weiss auch an welchem Code-Stück es liegt, nämlich an der Methode

Code:
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)

Das Problem hierbei ist, wie bring ich dem Editor bei, dass er nur den Wert der aktuellen Zelle ändert und nicht den Rest zusätzlich. Hat schon mal jmd sowas ähnliches gemacht bzw. weiss hierzu Rat?

Code:
public class CheckBoxCellEditor extends JCheckBox implements TableCellEditor {
	
	private static final long serialVersionUID = 3281300902593375342L;
	private transient Vector _listeners;

	public CheckBoxCellEditor() {
		this.setHorizontalAlignment(JCheckBox.CENTER);
		_listeners = new Vector();

		this.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				stopCellEditing();
			}
		});
	}

	public void addCellEditorListener(CellEditorListener cel) {
		_listeners.addElement(cel);
	}

	public void removeCellEditorListener(CellEditorListener cel) {
		_listeners.removeElement(cel);
	}

	public boolean stopCellEditing() {
		return true;
	}

	public void cancelCellEditing() {
	}

	public Object getCellEditorValue() {
		return new Boolean(this.isSelected());
	}

	public boolean isCellEditable(EventObject eo) {
		return true;
	}

	public boolean shouldSelectCell(EventObject eo) {
		return true;
	}

	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		if (value == null) {
			return this;
		}
		
		if(column == 9 && value.equals("false")) {
			super.setBackground(table.getBackground());
			super.setSelected(true);
		}else if(column == 9 && value.equals("true")) {
			super.setBackground(table.getBackground());
			super.setSelected(false);
		}
		return this;
	}
}
 
Zurück