हालांकि प्रश्नकर्ता button.doClick()
से संतुष्ट , मैं कुछ ऐसा ढूंढ रहा था जैसे एक स्नेही सेट करने के बाद क्या होता है, यानि button.setMnemonic(KeyEvent.VK_A)
के साथ। आप वास्तव में कुछ भी होने के बिना ALT + A दबा सकते हैं (दृश्य परिवर्तन को छोड़कर)। और कुंजी ए (एएलटी के साथ या बिना) के रिलीज होने पर, बटन एक्शनवेन्ट को निकाल देता है।
मैंने पाया कि मैं, button.getModel()
साथ (Java 8 API देखें) ButtonModel प्राप्त कर सकते हैं तो नेत्रहीन (दोनों स्मृति सहायकों द्वारा बदल रहे हैं) model.setPressed(true); model.setArmed(true);
साथ बटन दबाते हैं, और नेत्रहीन false
करने के लिए दोनों की स्थापना करके बटन छोड़ें। और जब model.setPressed(false)
कॉल किया जाता है, जबकि बटन दबाया जाता है और सशस्त्र होता है, तो बटन स्वचालित रूप से एक्शनवेन्ट को सक्रिय करता है (model.setArmed(false)
कॉलिंग केवल दृश्यमान रूप से बटन बदलता है)।
एक बटन शुरू हो रहा है, और एक ActionEvent निकाल दिया जाता है, जब माउस, जबकि मॉडल सशस्त्र है जारी किया गया है [...] [ButtonModel जावा API दस्तावेज़ों से उद्धरण]
बनाने के बटन दृश्यमान होने पर कुंजी प्रेस पर प्रतिक्रिया करता है (जिसमें खिड़की के बिना या फोकस मालिक होने की आवश्यकता वाले बटन के बिना, यानी जब विंडो में एक और घटक केंद्रित होता है) मैंने कुंजी बाइंडिंग का उपयोग किया (Official Java Tutorial देखें)।
कार्य कोड: बटन को दृश्यमान रूप से दबाए रखने के लिए SHIFT + A दबाएं (button.setMnemonic()
के साथ निमोनिक सेट होने के बाद कुंजी के साथ ALT दबाए जाने के विपरीत)। और कंसोल पर एक्शन कमांड ("बटन") मुद्रित करने के लिए कुंजी जारी करें।
// MnemonicCode.java
import javax.swing.*;
import java.awt.event.*;
public class MnemonicCode extends JFrame
{
public MnemonicCode(int keyCode)
{
JButton button = new JButton("button");
getContentPane().add(button);
addMnemonicToButton(button,keyCode);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println(e.getActionCommand());
}
});
pack();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) throws Exception
{
MnemonicCode bp = new MnemonicCode(KeyEvent.VK_A);
}
void addMnemonicToButton(JButton button,int keyCode)
{
int shiftMask = InputEvent.SHIFT_DOWN_MASK;
// signature: getKeyStroke(int keyCode, int modifiers, boolean onKeyRelease)
KeyStroke keyPress = KeyStroke.getKeyStroke(keyCode,shiftMask,false);
KeyStroke keyReleaseWithShift = KeyStroke.getKeyStroke(keyCode,shiftMask,true);
// get maps for key bindings
InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = button.getActionMap();
// add key bindings for pressing and releasing the button
inputMap.put(keyPress,"press"+keyCode);
actionMap.put("press"+keyCode, new ButtonPress(button));
inputMap.put(keyReleaseWithShift,"releaseWithShift"+keyCode);
actionMap.put("releaseWithShift"+keyCode, new ButtonRelease(button));
///*
// add key binding for releasing SHIFT before A
// if you use more than one modifier it gets really messy
KeyStroke keyReleaseAfterShift = KeyStroke.getKeyStroke(keyCode,0,true);
inputMap.put(keyReleaseAfterShift,"releaseAfterShift"+keyCode);
actionMap.put("releaseAfterShift"+keyCode, new ButtonRelease(button));
//*/
}
class ButtonPress extends AbstractAction
{
private JButton button;
private ButtonModel model;
ButtonPress(JButton button)
{
this.button = button;
this.model = button.getModel();
}
public void actionPerformed(ActionEvent e)
{
// visually press the button
model.setPressed(true);
model.setArmed(true);
button.requestFocusInWindow();
}
}
class ButtonRelease extends AbstractAction
{
private ButtonModel model;
ButtonRelease(JButton button)
{
this.model = button.getModel();
}
public void actionPerformed(ActionEvent e)
{
if (model.isPressed()) {
// visually release the button
// setPressed(false) also makes the button fire an ActionEvent
model.setPressed(false);
model.setArmed(false);
}
}
}
}
के संभावित डुप्लिकेट (http: // stackoverflow। कॉम/प्रश्न/4753004/कैसे करें-i-programatically-send-actionevent-to-jbutton) – OscarRyz