TableCellEditor -> editieren stoppen

Status
Nicht offen für weitere Antworten.
R

Roar

Gast
hallo,
ich hab hiern kleines problem, es geht um folgendes:
ich hab eine Tabelle in der werden JLabels dargestellt, in der ersten spalte ist auch ein icon mit dabei. so, wenn jetzt die zelle editiert werden soll, würde ja standartmäßig ein JTexField erscheinen, und das JLabel als String dargestellt werden. das hab ich auch erfolgreich unterbunden mit einem eigenen CellEditor von DefaultCellEditor abgeleitet. wenn jetzt editiert wird soll anstatt dem normalen JLabel ein eigener Component angezeiget werden, der ein JLabel als icon und ein JTextField für den text beinhaltet. das klappt auch gut, und wenn ich jetzt beim editieren Escape drücke dann wird das editieren automaticsh gestoppt. so hier erstmal code, der mehr als 1000 worte sagt:

Code:
public class FileTableCellEditor extends DefaultCellEditor {
	
	public FileTableCellEditor() {
		super(new JTextField());
	}

	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		if(((String)table.getColumnModel().getColumn(column).getHeaderValue()).equals("Name") && isSelected) {
			return new FileTableEditingCell((JLabel)value, this);                                                                                                                                                                                                                                                                                                                                                                                                    
		} else {
			return (JLabel)value;
		}
	}
}

class FileTableEditingCell extends JPanel implements KeyListener {
	
	protected JTextField tf;
	protected JLabel icon;
	private TableCellEditor editor;
	
	public FileTableEditingCell(JLabel lab, TableCellEditor editor) {
		tf = new JTextField(((JLabel)lab).getText(), 20);
		icon = new JLabel(((JLabel)lab).getIcon());
		this.editor = editor;
		setLayout(new BorderLayout());
		add(icon, BorderLayout.WEST);
		add(tf, BorderLayout.CENTER);
		addKeyListener(this);
	}
	
	public void keyPressed(KeyEvent e) {
	}
	
 	public void keyReleased(KeyEvent e) {
 	}
 	
 	public void keyTyped(KeyEvent e) {
 		if(e.getKeyCode() == KeyEvent.VK_ENTER) {
 			editor.cancelCellEditing();
 		}
 	}
}

so. wie man sieht hab ich hier nen KeyListener eingebaut, damit das editieren gestoppt wird wenn man auf Enter drückt, und das geht auch soweit so gut, nur dass danach eine ClassCastException auftritt, weil ich in meinem TableCellRenderer die value in der zelle in ein JLabel caste, aber da ich hier bei meinem Editor per super den konstruktor mit dem JTextField aufgerufen hab, also steht da ein String in der zelle, es soll nach dem editieren aber weiterhin mein JLabel mit icon und dem neuen text drinstehen..

wie kann ich das realisieren?

edit:
so, der KeyListener muss natürlich am textField hängen, aber jetzt hab ich das problem, dass der KeyListener gar nicht angeworfen, bzw. erst zu spät angecallt wird, wenn man F1 oder Enter oder so drückt. wieso?
 
R

Roar

Gast
ok das mit enter geht jetzt, der code muss in keyTyped() :-/
aber was ist mti anderen sondertasten? und bei Masuklicks?
 
B

Beni

Gast
@Roar
Ich vermute, du musst noch "CellEditor#getCellEditorValue()" überschreiben.

P.S. macht es Sinn, JLabels als values zu nehmen? Du könntest doch eine Klasse für Icon + Text schreiben, und noch den CellRenderer ersetzen. Würde weniger Ressourcen wegsaugen.

mfg Beni
 
R

Roar

Gast
hm ich hab jetzt als value File genommen, und im renderer werden dann JLabels erzeugt.ich habs jetzt hinbekommen dass der wieder zurückkehrt bei dem druck von Enter oder einer "Action-Taste"...
das geht jetzt soweit, aber was ist mit Mausklicks? dann kommt wieder ne ClassCast.
ich habs shcon mit nem CellEditorListener versucht, aber das hat irgendwie nix gebracht ???:L
 
R

Roar

Gast
so es geht jetzt... ist zwar sicher nicht die legenazeste lösung aber es geht:
Code:
// renderer:
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		JLabel label = new JLabel(value.toString());
		String columnName = (String)table.getColumnModel().getColumn(column).getHeaderValue();
		FileSystemView fsv = FileSystemView.getFileSystemView();
		File f;
		if(value instanceof File) {
			f = (File)value;
		} else {
			((FileTableCellEditor)table.getDefaultEditor(Object.class)).cancelEditing(row, column);
			f = (File)table.getValueAt(row, column);
		}
// bla

// editor:

	private FileTableEditingCell editorComponent;

	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		if(((String)table.getColumnModel().getColumn(column).getHeaderValue()).equals("Name") && isSelected) {
			editorComponent = new FileTableEditingCell((File)value, this);
			return editorComponent;
		} else {
			return (JLabel)value;
		}
	}

// bla
	public void cancelEditing(int row, int col) {
		System.out.println("row: "+ table.getSelectedRow()+" col: "+ table.getSelectedColumn());
		File f = editorComponent.getFile();
		table.setValueAt(f ,row, col);
		cancelCellEditing();
	}
// bla
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
C Swing Spinner als TableCellEditor - Text zu klein AWT, Swing, JavaFX & SWT 2
N Tutorial für TableCellEditor AWT, Swing, JavaFX & SWT 1
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
S JTable & TableCellEditor Problem AWT, Swing, JavaFX & SWT 5
M JTable: TableCellEditor nach Eingabe sofort beenden? AWT, Swing, JavaFX & SWT 3
M JPanel mit Textfeld als TableCellEditor AWT, Swing, JavaFX & SWT 9
E TableCellEditor für jede Zelle AWT, Swing, JavaFX & SWT 4
m@nu Problem mit eigener TableCellEditor-Impelemtierung AWT, Swing, JavaFX & SWT 5
D Fehler im TableCellEditor? AWT, Swing, JavaFX & SWT 2
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
earlgrey_tea JTable Zelleninhalt beim Editieren löschen AWT, Swing, JavaFX & SWT 5
T [JavaFX 2.0] ListView editieren AWT, Swing, JavaFX & SWT 2
E Swing CellEditor mit Combobox durch Tastatureingabe editieren?! AWT, Swing, JavaFX & SWT 3
J Swing JList editieren - Laufzeitfehler? AWT, Swing, JavaFX & SWT 9
C Swing JTable Zelle mit Einfachklick editieren AWT, Swing, JavaFX & SWT 3
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
Go ein "JLabel" mit Doppelklick editieren. AWT, Swing, JavaFX & SWT 5
P Textfelder in einem Frame lassen sich nicht editieren AWT, Swing, JavaFX & SWT 3
A bei TableCells editieren unterdrücken AWT, Swing, JavaFX & SWT 5
O JTree Node sofort editieren AWT, Swing, JavaFX & SWT 2
K Editieren abbrechen AWT, Swing, JavaFX & SWT 11
M JTable: Editieren einer Zelle "von außen" abbreche AWT, Swing, JavaFX & SWT 2
T Wenn in JTable Editieren von Rows,Cols AWT, Swing, JavaFX & SWT 2
W Zellen Inhalt beim editieren markieren AWT, Swing, JavaFX & SWT 2
M JTable Zelle editieren AWT, Swing, JavaFX & SWT 2
C Zellen editieren AWT, Swing, JavaFX & SWT 4
P JTable (->Datenbank) editieren/updaten AWT, Swing, JavaFX & SWT 3
D JTable zum Einfügen/Löschen/Editieren von Daten AWT, Swing, JavaFX & SWT 5
thE_29 JList Item editieren AWT, Swing, JavaFX & SWT 7
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
N Rahmen zum editieren der Größe eines JComponents? AWT, Swing, JavaFX & SWT 2
L JTable editieren AWT, Swing, JavaFX & SWT 4
L JTable - Button Speichern während des Editieren AWT, Swing, JavaFX & SWT 3
S JSpinner: Editieren einschränken AWT, Swing, JavaFX & SWT 4
D JComboBox editieren AWT, Swing, JavaFX & SWT 2
J Zellen editieren ausschalten AWT, Swing, JavaFX & SWT 2
M JTree: Wie einen Knoten editieren? AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Timer in SwingWorker stoppen AWT, Swing, JavaFX & SWT 4
Nuiton Swing SwingWorker - Prozess stoppen AWT, Swing, JavaFX & SWT 4
C Wie kann ich den Sound stoppen? AWT, Swing, JavaFX & SWT 4
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
G Swing Timer stoppen AWT, Swing, JavaFX & SWT 4
R Thread stoppen, nachdem eine Taste gedrückt wird AWT, Swing, JavaFX & SWT 2
O Thread zerstören / stoppen in java 1.5? AWT, Swing, JavaFX & SWT 9
M JTextPane - Zeilenumbruch verhindern stoppen deaktivieren :) AWT, Swing, JavaFX & SWT 5
m@nu JTable: Editor stoppen AWT, Swing, JavaFX & SWT 8
Z javax.swing.Timer: wie stoppen??? AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben