asker button.doClick()
memnun olmasına rağmen Mnemonik ayarlandıktan sonra, button.setMnemonic(KeyEvent.VK_A)
ile olan gibi bir şey arıyordum. ALT + A'yı herhangi bir şey olmaksızın (görsel değişiklik hariç) basılı tutabilirsiniz. Ve anahtar A'nın (ALT ile veya olmadan) serbest bırakılması üzerine, düğme bir ActionEvent çıkarır.
ben,
button.getModel()
ile (
Java 8 API bakınız) buttonModel olsun sonra görsel (hem mnemonic'ler ile değiştirilir)
model.setPressed(true); model.setArmed(true);
ile düğmesine basın ve görsel
false
hem ayarlayarak düğmesini bırakın tespit ettik. Düğme hem basılı hem de basılıyken
model.setPressed(false)
çağrıldığında, düğme otomatik olarak bir ActionEvent yangın yapar (çağırarak
model.setArmed(false)
düğmeyi görsel olarak değiştirir).
Bir düğme tetiklenir ve bir ActionEvent modeli silahlı iken fare serbest bırakıldığında, ateşlenir [...] [buttonModel Java API belgelerine alıntı]
yapmak için Uygulama, tuş görünürken tuş basmalarına tepki verir (içeren pencere veya odak sahibi olması gereken düğme olmadan, yani penceredeki başka bir bileşen odaklandığında) Tuş bağlarını kullandım (bkz. Official Java Tutorial).
Çalışma kodu: Düğmeye görsel olarak basmak için ÜSTKRKT + A tuşlarına basın (mnemonik button.setMnemonic()
ile ayarlandıktan sonra tuşa basarak ALT tuşuna basmak). Ve konsoldaki eylem komutunu ("düğme") yazdırmak için tuşu bırakın.
// 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);
}
}
}
}
olası yinelenen (http: // stackoverflow. com/questions/4753004/how-do-i-programatik-send-actionevent-to-jbutton) – OscarRyz