即使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相关推荐

  1. java map 缓存数据_Map方式实现JAVA数据缓存

    首先建一个map,该map用来存放所有的数据 protected static Map map = new HashMap<>(); 加载所有User,将其放入到User中,map的key ...

  2. java图像在背景图移动_java – 在Swing中移动背景图像

    你好我是编程新手,我们有一个项目.我们创建了一个简单的赛车游戏,背景动人,但我坚持我的代码,我不知道该怎么做.游戏开始时我需要一个移动的背景请有人帮助我.我在求T_T 这是我的代码: public c ...

  3. java原生的编译软件_原生态Java 程序员容易忽视的编程细节

    Java是Java程序设计语言和Java平台的总称,要想学好一门语言,打好基础最关键的,学习一种新的编程语言比学习新的口头语言要容易得多.然而,在这两种学习过程中,都要付出额外的努力去学习不带口音地说 ...

  4. Java里面遍历list的方式

    问题:Java里面遍历list的方式 对于Java语言有点陌生,我尝试熟悉遍历list(或者其他集合)的所有方法(或者是其他正确的语法)和它们每一个方法的优缺点 给定 List的list对象,我知道有 ...

  5. Windows以服务方式运行Java程序

    Windows以服务方式运行Java程序 Windows以服务方式运行Java程序 方式1:通过windows的startup自启动实现 方式2:通过winsw实现windows的服务注册与启动 Wi ...

  6. eclipse 创建java文件_如何在eclipse创建Java类文件呢?

    现在,很多读者都会对Eclipse工具已经有大体的认识,本次教程将会为大家介绍如何使用Eclipse完成Hello,java程序的频讲解,那么.在Eclipsea中编写java程序,必须先创建项目,那 ...

  7. java编程访问hdfs_以编程方式访问Java基本类型的大小

    java编程访问hdfs 许多不熟悉Java的开发人员首先要了解的一件事是Java的基本原始数据类型 ,其固定(与平台无关)的大小(以位或字节为单位用二进制补码表示 )以及它们的范围(Java中所有数 ...

  8. 以编程方式访问Java基本类型的大小

    许多不熟悉Java的开发人员首先要了解的一件事是Java的基本原始数据类型 ,其固定(与平台无关)的大小(以位或字节为单位用二进制补码表示 )以及它们的范围(Java中所有数字类型都是带符号的) ). ...

  9. Java异步非阻塞编程的几种方式

    简介: Java异步非阻塞编程的几种方式 一. 从一个同步的Http调用说起 一个很简单的业务逻辑,其他后端服务提供了一个接口,我们需要通过接口调用,获取到响应的数据. 逆地理接口:通过经纬度获取这个 ...

最新文章

  1. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
  2. 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)
  3. 很少有人能把CDN说的这么有趣了
  4. html5 css登录注册实现,html5+css3实现一款注册表单实例
  5. JVM系列五:JVM监测工具[整理中]
  6. js的hasOwnProperty
  7. XILINX 7系列FPGA与SOC产品选型指南
  8. 网络安全-MySQL数据库
  9. 更新TKK失败,请检查网络连接的解决办法
  10. 一般时序电路设计(次态卡诺图化简法)
  11. 【图文并茂】六十多个 vscode 插件,助你打造最强编辑器
  12. Evernote 印象笔记离线使用方法
  13. 欧文分校计算机科学硕士项目,申请2019加州大学欧文分校计算机科学硕士要求都有哪些?...
  14. Android StepsView 步骤控件
  15. 大学计算机基础实验教程实验2-7,大学计算机基础实验教程(Windows 7+Office 2010)(第2版)...
  16. java模拟excel排序_Apache-POI在excel中排序行
  17. 使用httpclient时报错NoHttpResponseException failed to respond
  18. 微信小程序 评论input 弹出框
  19. uefi安装win10原版镜像|uefi gpt模式安装win10官方系统教程
  20. python 依据某几列累加求和_如何用Python找出PSY超卖的股票?

热门文章

  1. 修改LDAP查询默认1000条限制
  2. Visual Studio中的Build和Rebuild区别
  3. ASP:FileSystemObject处理文件
  4. 广州的11个辖区_广州“受欢迎”的2个区,相距仅20公里,若“合并”将超黄埔区...
  5. 切割图形_重庆Q3245R锅炉板加工几何图形2021新闻
  6. 自由自在带你品尝一种能长出果蔬的冰淇淋
  7. 【PP操作手册】运行MRP产生计划订单
  8. 程序间数据共享与传递(1):EXPORT/IMPORT、SAP/ABAP Memory
  9. 【转】手工导入传输请求(Transport Request)
  10. 创建Invoice和公司间Invoice