CellEditor in JTable

barsiq

Mitglied
Hallo,

ich habe folgendes vor:

In jeder Zelle einer einspaltigen Tabelle ist ein mehrzeiliger Text und Button.
Der Renderer ist ein JComponent und hat also n JLabels und 1 JButton.

Nun muss der Klick in die Zelle (Background und Labels) Action X auslösen, der Buttonklick jedoch Action Y.

Wie sieht denn ein CellEditor für so einen Fall aus?
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,

also ich würde vorschlagen, dass du einfach einen Selectionlistener auf die JTable legst, dadurch bekommst du dann die jeweilige Row. (Aktion x)
Um nun ein Event über den Button abzufeuern, kannst du diesen einfach vorher definieren und einen ActionListener setzen. (Aktion y)

Viele Grüße

Sporticus
 

barsiq

Mitglied
Also ich habe es ein wenig umgebaut, da ich dachte das Problem verstanden zu haben.

Also, JTable list (hehe) ist einspaltig und hat ein Model das in der getValueAt einen JComponent als Rückgabewert liefert. Dieses Component (weiter - Wrapper) ist dann mit mehreren Labels und einem Button versehen.

Der Renderer der Tabelle kümmert sich nur um Farben des Wrappers.
Code:
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		DHPEVDOperationWrapper wrapper = (DHPEVDOperationWrapper)value; 
		// Hintergrund und Vordergrundfarben
		if (isSelected){ //	Wenn selektiert
			wrapper.setForeground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getSelectedForegroundColor());
			wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getSelectedBackgroundColor());
		}
		else{ //	Sonst
			if (row%2 != 0) // gerade
				wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getLineOddColor());
			else  //	ungerade
				wrapper.setBackground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getLineEvenColor());
			wrapper.setForeground(DHPAsgard.getLayout().getColorSchema().getTableListColorSchema().getTextColor());	
		}
		return wrapper;
	}

Der Editor sieht so aus:
Code:
public class DHPScenarioListEditor extends AbstractCellEditor implements TableCellEditor {
	
	private static final long serialVersionUID = 920103338796844890L;

	@Override
	public Object getCellEditorValue() {
		System.err.println("Editor.getCellEditorValue");
		return null;
	}

	@Override
	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		System.err.println("Editor an [" + row + ":" + column + "]");
		return (Component)table.getValueAt(row, column);
	}

}

Diese Ausgaben vom CellEditor sehe ich abe nie.
Der Editor wird dabei wie folgt gesetzt:
Code:
		list.setCellEditor(new DHPScenarioListEditor());
		list.getColumnModel().getColumn(0).setCellEditor(new DHPScenarioListEditor());

Trotzdem scheint es nicht zu greifen.

Was mache ich da falsch?