小编Pau*_*l N的帖子

使用空格键触发JButton,或输入键或鼠标单击

我正在尝试使用单个按钮获取一个简单的JFrame,以便在发生任何这些事件时触发事件:

  • 按下Enter键并且JButton具有焦点
  • 按下空格键并且JButton具有焦点
  • 单击JButton.

似乎Enter和空格键是"免费",以及使用JButton上的addActionListener默认鼠标点击; 问题是,我已经读过,键绑定依赖于所使用的外观.

我试图通过将Enter和空格键添加到JButton的动作映射来在LaF中获得通用行为,甚至添加了一个随机键("m")以确保ActionMap正在进行工作(它是),但现在是鼠标点击丢失.我似乎能够获得所有键和鼠标单击的唯一方法是使用动作映射和addActionListener.

有没有办法让这些键和鼠标绑定在所有LaF中一致地工作,而不试图检测可能出现的每个可能的LaF?我可以注册一个动作侦听器,它将触发键和鼠标事件吗?

我最喜欢的解决方案是在JButton动作图中添加鼠标点击,并检测动作内部发生的键或鼠标点击.

我还在这里学习绳索,所以这可能不是最好或最有效的做事方式; 我确定它过度设计了.这是一种训练练习,我正在试验我能掌握的一切.欢迎任何和所有编码风格的评论!

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;

public class Example extends JFrame {

// ============================
private class BtnListener extends AbstractAction {
    private static final long serialVersionUID = 1L;

    public void actionPerformed(ActionEvent ae) {
        System.out.println("\nclick button listener triggered");
        System.out.println(ae.getSource().getClass().toString());
    }
} // class BtnListener

private static final int NO_MODIFIER = 0;
private static …
Run Code Online (Sandbox Code Playgroud)

java swing key-events jbutton

3
推荐指数
1
解决办法
8308
查看次数

标签 统计

java ×1

jbutton ×1

key-events ×1

swing ×1