Hallo,
ich habe die Tastenkombination [CTRL] + [UP] (Pfeil nach oben) auf eine Action gesetzt. Diese Action hängt auch an einem JMenuItem. Immer wenn also diese Tastenkombination gedrückt wird soll die entsprechende Action ausgeführt werden.
Dies funktioniert prima solange der Fokus nicht in einer JTable liegt.
Was kann ich tun, damit die Tastenkombination auch funktioniert, solange der Fokus in einer JTable ist?
Vielen Dank im Voraus, dominik
PS: Ich habe mal ein kleines Beispielprogramm geschrieben, das dieses Verhalten verdeutlicht: Das Fenster schließt man entweder über das MenuItem oder eben mit der Tastenkombination CTRL+UP. Wenn der Fokus in der Tabelle ist, klappt die Tastenkombination nicht mehr...
PPS: Wenn ich das Programm aus meiner IDE aus starte (Netbeans 5.0) klappt die Tastenkombination immer. Starte ich aber die Klasse einzeln aus der Shell oder über das JarFile ist das Verhalten wie oben beschrieben (sprich STRG+PfeilHoch geht nicht während der Fokus in der Tabelle liegt).
Warum das so ist wäre zwar auch interessant zu klären, aber primär würde mich interessieren wie ich der Tabelle abgewöhnen kann CTRL+UP zu "fressen".
Hier der Beispielcode:
ich habe die Tastenkombination [CTRL] + [UP] (Pfeil nach oben) auf eine Action gesetzt. Diese Action hängt auch an einem JMenuItem. Immer wenn also diese Tastenkombination gedrückt wird soll die entsprechende Action ausgeführt werden.
Dies funktioniert prima solange der Fokus nicht in einer JTable liegt.
Was kann ich tun, damit die Tastenkombination auch funktioniert, solange der Fokus in einer JTable ist?
Vielen Dank im Voraus, dominik
PS: Ich habe mal ein kleines Beispielprogramm geschrieben, das dieses Verhalten verdeutlicht: Das Fenster schließt man entweder über das MenuItem oder eben mit der Tastenkombination CTRL+UP. Wenn der Fokus in der Tabelle ist, klappt die Tastenkombination nicht mehr...
PPS: Wenn ich das Programm aus meiner IDE aus starte (Netbeans 5.0) klappt die Tastenkombination immer. Starte ich aber die Klasse einzeln aus der Shell oder über das JarFile ist das Verhalten wie oben beschrieben (sprich STRG+PfeilHoch geht nicht während der Fokus in der Tabelle liegt).
Warum das so ist wäre zwar auch interessant zu klären, aber primär würde mich interessieren wie ich der Tabelle abgewöhnen kann CTRL+UP zu "fressen".
Hier der Beispielcode:
Code:
// package ctrlUp;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class CtrlUpActionTest {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("CTRL + UP is eaten by the table");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("File");
JMenuItem mi = new JMenuItem(new ctrlUpAction());
menu.add(mi);
mb.add(menu);
frame.setJMenuBar(mb);
final Object[][] rowData = new Object[][] { {"jasdf", "asdfzug"},
{"sdfhgsdgflg", "aslfhahgk"},
{"jasdf", "asdfzug"},
{"sdfhgsdgflg", "aslfhahgk"},
{"jasdf", "asdfzug"},
{"sdfhgsdgflg", "aslfhahgk"},
{"jasdf", "asdfzug"},
{"sdfhgsdgflg", "aslfhahgk"},
{"jasdf", "asdfzug"},
};
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new JTextField("While the Table has the Focus CTRL+UP is ignored"), BorderLayout.NORTH);
frame.getContentPane().add(new JScrollPane(new JTable(rowData, new String[] { "col A", "col B" } )), BorderLayout.CENTER);
frame.getContentPane().add(new JButton("useless Button"), BorderLayout.SOUTH);
//Display the window.
frame.pack();
frame.setSize(400,200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class ctrlUpAction extends AbstractAction {
public ctrlUpAction(){
final KeyStroke accelerator = KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.CTRL_MASK);
putValue(javax.swing.Action.NAME , "Exit");
putValue(javax.swing.Action.ACCELERATOR_KEY, accelerator);
setEnabled(true);
}
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}