I ctrl + Verschiebung + Numpad 7 auf eine Aktion Karte zuordnen möchten. Im Grunde versuche ich, meine Aktionen an Tastaturkürzel zu binden und möchte das gleiche Verhalten wie die von oben gedrückten Zifferntasten oder die von den richtigen Tastaturnummern gedrückten Zifferntasten.Wie Strg + Shift + Numpad Tasten zur Unterstützung mit java.awt
Ich bin in der Lage
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), "Ctrl+4");
zur Karte aber
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), "Ctrl+4");
hier nicht abbilden kann, ist der Code, den ich auszuführen versuche:
package testmaik;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class KeyBindingsTest {
public static void main(String[] args) {
new KeyBindingsTest();
}
public KeyBindingsTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JLabel state;
/**
*
*/
public TestPane() {
setLayout(new GridBagLayout());
state = new JLabel("Nothing here");
add(state);
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.CTRL_DOWN_MASK), "Ctrl+1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_2, KeyEvent.CTRL_DOWN_MASK), "Ctrl+2");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD1, KeyEvent.CTRL_DOWN_MASK), "Ctrl+1");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, KeyEvent.CTRL_DOWN_MASK), "Ctrl+2");
im.put(KeyStroke.getKeyStroke("ctrl 7"), "ctrl+7");
im.put(KeyStroke.getKeyStroke("ctrl shift 7"), "Ctrl+3");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_NUMPAD2, KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK), "Ctrl+4");
ActionMap am = getActionMap();
am.put("Ctrl+1", new MessageAction("Ctrl+1"));
am.put("Ctrl+2", new MessageAction("Ctrl+2"));
am.put("Ctrl+3", new MessageAction("Ctrl+3"));
am.put("ctrl+7", new MessageAction("ctrl+7"));
am.put("Ctrl+4", new MessageAction("Ctrl+4"));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public class MessageAction extends AbstractAction {
private String message;
public MessageAction(String message) {
this.message = message;
}
@Override
public void actionPerformed(ActionEvent e) {
state.setText(message);
}
}
}
}
Bitte helfen.
Ich habe anscheinend keine Probleme, wenn ich 'KeyEvent.VK_1' registriere, antwortet der Nummernblock 1 auch. Welche OS- und Java-Version verwenden Sie? – MadProgrammer
Ich verwende Windows 7 und Java 7. VK_1 und VK_NUMPAD1 haben beide unterschiedliche Ereigniscodes. Es kann nicht automatisch ohne Code-Entwicklung registriert werden. Bitte teilen Sie es wenn es so ist. – Bhavin
Ich fand auch, dass Verschiebung und Nummernblock nicht zusammen arbeiten. Wenn shift mit Numpad-Tasten verwendet wird, wird es so gelesen, als würden die Pfeiltasten gedrückt. Wenn wir die Shift-Taste wie Pfeil-Bewegungstasten deaktivieren, können wir die Verschiebung mit anderen Tasten verknüpfen, als ich die Zuordnung von Strg Alt und Numpad7 überprüft habe – Bhavin