Fokus auf CB in Table mit beliebiger Taste

Status
Nicht offen für weitere Antworten.

tinker

Mitglied
Hallo,
wie kann ich mit einer beliebigen Taste den Fokus einer Table setzen (get standardmäßig, soweit ich weiß, nur mit 'F2')

Hab eine Table mit Textfeldern und Comboboxen darin. Wenn ich mich jetzt zb. in einer Zelle mit einer CB dahinter befinde und ich zb. die Taste 'B' drücke, hätte ich gerne, das in der CB der Eintrag, der mit 'B' beginnt ,sofort ausgewählt wird. Funktioniert zur Zeit noch nicht, ich muss stattdessen mit 'F2' erst den Fokus auf die CB setzen und kann dann durch drücken der Taste 'B' den Eintrag auswählen.

Bitte um Hinweise wie ich an das Problem gehen könnte. Danke!
 

Ebenius

Top Contributor
:meld: Nur um das mal terminologisch zu korrigieren: Du möchtest den CellEditor aus der JTable starten. Das geht nur, wenn die JTable ohnehin Fokus hat.

Und so funktioniert's:
Code:
table.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "startEditing");
Ebenius
 

tinker

Mitglied
Ah, sehr fein! Funktioniert. Nur is es jetzt ja so, dass ich den Editor mit jedem Buchstaben starten will. Muss ich die Funktion nun für jeden Buchstaben extra aufrufen, oder gibt es eine elegantere Variante?
 

Ebenius

Top Contributor
tinker hat gesagt.:
Nur is es jetzt ja so, dass ich den Editor mit dem Buchstaben starten will. Muss ich die Funktion nun für jeden Buchstaben extra aufrufen, oder gibt es eine elegantere Variante?
???:L Das ist schon was ganz anderes. Probier mal das:
Code:
table.putClientProperty("JTable.autoStartsEdit", Boolean.TRUE);

Ebenius
 

tinker

Mitglied
OK, ich hab mich im ersten Post vielleicht etwas ungünstig ausgedrückt.
Aber putClientProperty scheint nicht zu funktionieren, denn die table behält den Fokus, nur mit F2 geht er auf die CB über.
 

tinker

Mitglied
Ein eigener, abgeleitet von AbstractCellEditor. Dem Konstruktor geb ich unter anderem eine Map mit, anhand der entscheidet er, ob er bei getTableCellEditorComponent eine JComboBox oder ein JTextField zurück gibt.
 

Ebenius

Top Contributor
tinker hat gesagt.:
Ein eigener, abgeleitet von AbstractCellEditor. Dem Konstruktor geb ich unter anderem eine Map mit, anhand der entscheidet er, ob er bei getTableCellEditorComponent eine JComboBox oder ein JTextField zurück gibt.
Das dachte ich mir schon; mit dem DefaultCellEditor funktioniert das von Dir erwünschte Verhalten ja auch. :)

Poste mal den Code... Am besten einen zusammengeschrumpften CellEditor, der sich auf das Problem beschränkt. Wahrscheinlich machst Du im CellEditor was falsch.

Ebenius
 

tinker

Mitglied
Da ich im Editor noch einige spezifische Funktionen ausführen muss, und der Editor eben Textfelder und Comboboxen liefern muss funktioniert das ganze mit dem DefaultCellEditor leider nicht.

Hier mal ein auszug des Editor-Codes (// hab zwecks übersicht mal den Konstruktor entfernt):
Code:
public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {

    @Override
    public Object getCellEditorValue() {
        if (component instanceof JComboBox) {
            return ((JComboBox)component).getSelectedItem();
        } else {
            return ((JTextField)component).getText();
        }
    }

    @Override
    public Component getTableCellEditorComponent(javax.swing.JTable table, Object value, boolean isSelected, int row, int column) {
        Data data = values.get(row);
        String list = data.getList();
     

        if (list.equals("")) {
            textField = new JTextField();
            textField.setBorder(null);

            textField.setText((String)value);
            component = textField;
        } else {
            comboBox = new JComboBox(){
                @Override
                public void processFocusEvent(FocusEvent fe) {
                    super.processFocusEvent(fe);
                    Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();

                    if (isDisplayable() && fe.getID() == FocusEvent.FOCUS_GAINED && focusOwner == this && !isPopupVisible()) {
                        showPopup();
                    }
                }
            };

            comboBox.addKeyListener(new KeyAdapter() {

                @Override
                public void keyTyped(KeyEvent e) {
                    stopCellEditing();
                }
            });
            comboBox.setBorder(null);

            List<EnumItem> items = ListData.getListItems(ListData.getListID(list));
            if (items != null) {
                comboBox.addItem("");

                for (EnumItem ei: items) {
                    comboBox.addItem(ei.getNameGer());
                }

                comboBox.setSelectedItem(value);
            }
            component = comboBox;
        }

        return component;
    }

}
 

Ebenius

Top Contributor
Was passiert, wenn Du in Deinem CellEditor die Methode überschreibst ...
Code:
private char activationKeyChar = 0;

@Override
public boolean isCellEditable(EventObject event) {
  if (event.getID() == KeyEvent.KEY_PRESSED) {
    activationKeyChar = ((KeyEvent) event).getKeyChar();
  } else {
    activationKeyChar = 0;
  }

  super.isCellEditable(event);
}

... und dann in der getTableCellEditorComponent()-Methode prüfst, ob activationKeyChar != 0 ist, und ─ so dem so ist ─ mit JComboBox.selectWithKeyChar(char) den entsprechenden Eintrag auswählst?

Hab ich nicht getestet und den Code im Browser getippt. Hoffentlich ist's halbwegs richtig.

Ebenius
 

tinker

Mitglied
Genialer Einfall, danke! So sollts passen.

Den Code musste ich nur leicht ändern, hier für die Nachwelt:
Code:
@Override
    public boolean isCellEditable(EventObject event) {
        KeyEvent keyevent = null;
        if (event instanceof KeyEvent) {
            keyevent = (KeyEvent) event;
        }

        if (keyevent != null && (keyevent.getID() == KeyEvent.KEY_PRESSED)) {
            activationKeyChar = keyevent.getKeyChar();
        } else {
            activationKeyChar = 0;
        }

        return super.isCellEditable(event);
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
C SWT MenuBar & MenuItems Fokus wenn F10 unterdrücken/entfernen AWT, Swing, JavaFX & SWT 9
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
B Swing Fokus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
B Fokus markierung entfernen AWT, Swing, JavaFX & SWT 2
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
A Vordergrund und Fokus setzten oder Modales Einabefeld AWT, Swing, JavaFX & SWT 28
G SWT Fokus auf MsgBox setzen AWT, Swing, JavaFX & SWT 3
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
J Swing Wie Fokus richtig setzen? AWT, Swing, JavaFX & SWT 7
T Swing Fokus AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
H Swing Problem mit FocusCycleRoot, der FocusTraversalPolicy und dem Fokus AWT, Swing, JavaFX & SWT 2
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
E Swing Mit rechter Maustaste Fokus in JList setzen?! AWT, Swing, JavaFX & SWT 3
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
agent47 Swing auf Schnelltaste ohne Fokus hören AWT, Swing, JavaFX & SWT 2
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
Z Fokus auf Eingabefeld bei showMessageDialog setzen AWT, Swing, JavaFX & SWT 3
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
F Panel kann nicht Fokus erhalten AWT, Swing, JavaFX & SWT 2
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
multiholle AWT Hotkey ohne Fokus AWT, Swing, JavaFX & SWT 6
W JTextArea/TextArea kriegt keinen Fokus AWT, Swing, JavaFX & SWT 6
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
R Fokus von GUI-Elementen AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A ComboBox soll reagieren ohne fokus AWT, Swing, JavaFX & SWT 7
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
A Fokus und JTextField AWT, Swing, JavaFX & SWT 35
T JList mit eigenem TransferHandler: Fokus(?)-Probleme AWT, Swing, JavaFX & SWT 4
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
M Frame erhält ungewollt den Fokus AWT, Swing, JavaFX & SWT 10
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
G Event, wenn JTextField Fokus verliert? AWT, Swing, JavaFX & SWT 2
C Der hartnäckige Fokus AWT, Swing, JavaFX & SWT 3
G Keylistener/Fokus Problem AWT, Swing, JavaFX & SWT 3
B Fokus Problem unter Linux AWT, Swing, JavaFX & SWT 7
J JFrame und Fokus AWT, Swing, JavaFX & SWT 4
N Fokus Reihenfolge ändern AWT, Swing, JavaFX & SWT 12
M Fokus auf ein JTextfield in einem JDialog setzen AWT, Swing, JavaFX & SWT 6
I fokus AWT, Swing, JavaFX & SWT 4
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
J Anbindung Textfeldklasse an Table funktioniert nicht AWT, Swing, JavaFX & SWT 3
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14
B JavaFX JavaFX Table gespeichertes Wert auswählen/anvisieren AWT, Swing, JavaFX & SWT 3
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
T Table Renderer AWT, Swing, JavaFX & SWT 2
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
E JavaFX Von der Table-Cell zur Row AWT, Swing, JavaFX & SWT 0
A JavaFX Table Delete Row AWT, Swing, JavaFX & SWT 5
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
D JavaFX Table Filter AWT, Swing, JavaFX & SWT 4
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
T SWT checkbox in table AWT, Swing, JavaFX & SWT 6
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
Z JavaFX Table mit MenuButton AWT, Swing, JavaFX & SWT 6
T SWT Table (mit Spinner Spalte) Daten auslesen AWT, Swing, JavaFX & SWT 4
E extended Swing Table AWT, Swing, JavaFX & SWT 2
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
E SWT Popupmenu auf der Überschrift eines swt.widgets.Table verhindern? AWT, Swing, JavaFX & SWT 3
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
reibi SWT SWT - Table AWT, Swing, JavaFX & SWT 8
A Swing JButton in einer Table Cell AWT, Swing, JavaFX & SWT 9
lumo SWT JFace Databinding +Custom Table AWT, Swing, JavaFX & SWT 2
M SWT - Table deselecten AWT, Swing, JavaFX & SWT 2
R SWT | Table | Zeilenkopf AWT, Swing, JavaFX & SWT 2
M SWT Table disabled und Scrollbar enabled AWT, Swing, JavaFX & SWT 11
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
L Inhalt einer table löschen AWT, Swing, JavaFX & SWT 2
L Jbutton in table AWT, Swing, JavaFX & SWT 2
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
S SWT Maximum an Items in Table? AWT, Swing, JavaFX & SWT 2
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
Q SWT Mindetsgröße für Table AWT, Swing, JavaFX & SWT 7
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
hdi SWT SWT Table: 2 kleine Probleme AWT, Swing, JavaFX & SWT 4
S SWT Table Größen verändern AWT, Swing, JavaFX & SWT 10
lumo SWT Table und Klassen AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben