आप प्रश्न में किसी भी JTextComponent
साथ KeyBindings उपयोग करना चाहिए। KeyListeners
Swing
के परिप्रेक्ष्य से बहुत कम स्तर है। तुम्हें पता है, अवधारणा है जो AWT
से संबंधित था का उपयोग कर रहे Swing
KeyBindings
का उपयोग करता है और अधिक कुशलता के साथ एक ही काम करने के लिए और वांछित परिणाम आपकी मदद के लिए :-)
एक छोटा सा कार्यक्रम प्रदान करता है:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyBindingExample {
private static final String key = "ENTER";
private KeyStroke keyStroke;
private JButton button;
private JTextArea textArea;
private Action wrapper = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
button.doClick();
}
};
private void displayGUI() {
JFrame frame = new JFrame("Key Binding Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel(new BorderLayout(5, 5));
textArea = new JTextArea(10, 10);
keyStroke = KeyStroke.getKeyStroke(key);
Object actionKey = textArea.getInputMap(
JComponent.WHEN_FOCUSED).get(keyStroke);
textArea.getActionMap().put(actionKey, wrapper);
button = new JButton("Click Me!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.format("Button Clicked :-)%n");
}
});
contentPane.add(textArea, BorderLayout.CENTER);
contentPane.add(button, BorderLayout.PAGE_END);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new KeyBindingExample().displayGUI();
}
};
EventQueue.invokeLater(r);
}
}
स्रोत
2013-08-28 14:31:00
का उपयोग नहीं करते keyListeners बिल्कुल (यह सोचकर कि आपका कोड संभवतः कैसे काम कर सकता है: आपके पास _focusable_ लेबल हैं? कितना अजीब और उपयोगकर्ता भ्रमित ...) - कुंजीबिंडिंग का उपयोग करें – kleopatra