Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas

dl9hda

Mitglied
Hallo,

ich habe eine JTable mit einem eigenenen Editor (tableEditor extends AbstractCellEditor implements TableCellEditor).

In den einzelnen Zellen habe ich JTextAreas angelegt. Soweit so gut, mit der Tabelle ist alles OK. Nun möchte ich auf bestimmte Tastenkombinationen reagieren. Dies sind einmal CTRL+t und CTRL+e. Aber egal was ich mache, es funktioniert ausschließlich CTRL+t. Ich habe auch andere Tasten als "e" versucht. r, s, egal. Es funktioniert nicht.

[CODE lang="java" title="Ausschnitt aus public Component getTableCellEditorComponent ..."] Action ctrl_e_action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {

System.out.println("gedrückt wurdeCTRL+e");

}
};

Action ctrl_t_action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {

System.out.println("gedrückt wurde CTRL+t");

}
};

InputMap im_textArea = textArea.getInputMap(JTextArea.WHEN_FOCUSED);
ActionMap am_textArea = textArea.getActionMap();

KeyStroke ctrl_t = KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_DOWN_MASK);
am_textArea.put(im_textArea.get(ctrl_t), ctrl_t_action);

KeyStroke ctrl_e = KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK);
am_textArea.put(im_textArea.get(ctrl_e), ctrl_e_action);[/CODE]


Also die Ausgabe von "gedrückt wurde CTRL+t" funktioniert immer. Alles andere nicht.

Hat jemand einen Tipp?
 

dl9hda

Mitglied
Vielen Dank für die Antwort. Es funktioniert wohl nur mit typed. Also type E geht dann. Aber mit contrl E wieder nicht. Ich habe jetzt wieder einen keyListener zur JTextArea hinzugefügt und werde damit weiter arbeiten.
 

mihe7

Top Contributor
Es funktioniert wohl nur mit typed. Also type E geht dann. Aber mit contrl E wieder nicht.
Folgendes funktioniert einwandfrei:
Java:
import java.awt.event.*;
import javax.swing.*;

public class Test {

    public void run() {
        Action ctrl_e_action = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("gedrückt wurdeCTRL+e");
            }
        };

        JTextField tf = new JTextField(50);
        tf.getInputMap().put(KeyStroke.getKeyStroke(
                KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK), "strg+e");
        tf.getActionMap().put("strg+e", ctrl_e_action);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(tf);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

Neue Themen


Oben