欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java编程button_以编程方式在Java Swing中单击GUIbutton

发布时间:2025/3/20 java 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java编程button_以编程方式在Java Swing中单击GUIbutton 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

即使button.doClick()者对button.doClick()满意,我正在寻找类似于设置助记符(即button.setMnemonic(KeyEvent.VK_A)后发生的事情。 你实际上可以按住ALT + A而不发生任何事情(除了视觉上的变化)。 当释放键A(有或没有ALT)时,button触发一个ActionEvent。

我发现我可以通过button.getModel()获取ButtonModel(参见Java 8 API button.getModel() ,然后用model.setPressed(true); model.setArmed(true);按下buttonmodel.setPressed(true); model.setArmed(true); model.setPressed(true); model.setArmed(true); (两者都通过助记符进行更改),并通过将两者都设置为false来在视觉上释放button。 而当model.setPressed(false)在button和布防button被调用时,button会自动触发一个ActionEvent(调用model.setArmed(false)只会直观地改变button)。

[来自ButtonModel的Java API文档的引用]触发一个button,并触发一个ActionEvent,当鼠标在模型布防的时候被释放

为了让应用程序在button可见时(不包含包含窗口或button需要成为焦点所有者,即当窗口中的另一个组件被聚焦时)响应按键,我使用了键绑定(参见官方Java教程 )。

工作代码:按SHIFT + A直观地按下button(相比之下,在用button.setMnemonic()设置助记符后用键按ALT)。 然后释放键以在控制台上打印动作命令(“button”)。

// 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); } } } }

总结

以上是生活随笔为你收集整理的java编程button_以编程方式在Java Swing中单击GUIbutton的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。