Hallo alle zusammen!
Sobald ich in der JTable auf irgendeiner Zelle anfange zu tippen, springt die Tabelle standardmäßig in den Editier-Modus und das Geschrieben steht in einem Textfeld, dass sich anzeigt (also im Standard-Editor). Ich habe nun ein Problem mit einem TableCellEditor, dessen Methode getTableCellEditorComponent(...) ein JPanel zurückgibt, das wiederum ein Textfeld enthält. Wenn ich mit TAB in die Spalte wechsle, die den JPanel-Editor zugewiesen bekommen hat, und dort anfange zu tippen, wird zwar das Panel angezeigt, aber nicht das Textfeld im Panel fokussiert bzw. der geschriebene Text wird dort nicht hineingeschrieben. Nun habe ich bereits reichlich Beispiele im Internet gefunden, wie man eigene noch so komplexe Editoren zusammenbauen kann, aber auch wenn ich diese Editoren verwende, wird nach Drücken einer Taste lediglich das Panel angezeigt. Erst wenn ich mit der Maus in das Textfeld selbst klicke, kann ich dort was eintragen. Weiß jemand, wie man es hinkriegen kann, dass ein Editor beim Editierstart einer bestimmten Komponente den Fokus gibt, möglichst so, dass das erste getippte Zeichen bereits berücksichtigt wird?
Hier noch mal der Code, mit dem beispielsweise das Problem auftritt:
Es sei noch zu erwähnen: Das Textfeld liegt in einem Panel, weil neben dem Textfeld noch ein Button angezeigt werden soll, den ich hier aber weggelassen habe, da er für das Problem uninteressant sein dürfte.
Sobald ich in der JTable auf irgendeiner Zelle anfange zu tippen, springt die Tabelle standardmäßig in den Editier-Modus und das Geschrieben steht in einem Textfeld, dass sich anzeigt (also im Standard-Editor). Ich habe nun ein Problem mit einem TableCellEditor, dessen Methode getTableCellEditorComponent(...) ein JPanel zurückgibt, das wiederum ein Textfeld enthält. Wenn ich mit TAB in die Spalte wechsle, die den JPanel-Editor zugewiesen bekommen hat, und dort anfange zu tippen, wird zwar das Panel angezeigt, aber nicht das Textfeld im Panel fokussiert bzw. der geschriebene Text wird dort nicht hineingeschrieben. Nun habe ich bereits reichlich Beispiele im Internet gefunden, wie man eigene noch so komplexe Editoren zusammenbauen kann, aber auch wenn ich diese Editoren verwende, wird nach Drücken einer Taste lediglich das Panel angezeigt. Erst wenn ich mit der Maus in das Textfeld selbst klicke, kann ich dort was eintragen. Weiß jemand, wie man es hinkriegen kann, dass ein Editor beim Editierstart einer bestimmten Komponente den Fokus gibt, möglichst so, dass das erste getippte Zeichen bereits berücksichtigt wird?
Hier noch mal der Code, mit dem beispielsweise das Problem auftritt:
Code:
...
jTable.getColumnModel().getColumn(1).setCellEditor(new MyEditor());
...
class MyEditor extends AbstractCellEditor implements TableCellEditor {
JPanel panel;
JTextField txt;
public MyEditor() {
panel = new JPanel(new BorderLayout(0,0));
txt = new JTextField();
panel.add(txt);
}
public Object getCellEditorValue() {
return txt.getText();
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
txt.setText(value != null ? value.toString() : null);
return panel;
}
}
Es sei noch zu erwähnen: Das Textfeld liegt in einem Panel, weil neben dem Textfeld noch ein Button angezeigt werden soll, den ich hier aber weggelassen habe, da er für das Problem uninteressant sein dürfte.