Java 向程序添加键绑定
我现在正在做一个自动剪辑程序。我想按F10开始或停止自动单击。我该怎么做?如果用户当前打开了另一个程序,并且自动单击器被最小化,那么按键是否太可能?虽然我可以为您编写一整段代码,但我坚信没有什么比这更好 您只需实现KeyListener接口并使用该接口中所需的方法: 方法名称是不言自明的,并且显示了如何通过在每个片段中的注释来实现这些名称,以解释正在发生的事情 <> P>关于您的帖子,您可以考虑在项目中添加全局热键来启动/停止程序,只要根据程序的当前状态按下“代码> F10/CODE”。 关于你问题的第二部分,我没有直接的答案,因为我还没有遇到过这样的情况。然而,我四处搜寻,发现这似乎涵盖了你的问题,如果没有,也看看这个,第二个问题提出了我给你的想法,使用一个全局热键,但这必须写进去 希望这有助于你找到正确的标签()。使用Swing时,通常需要在较低级别Java 向程序添加键绑定,java,swing,jframe,key-bindings,Java,Swing,Jframe,Key Bindings,我现在正在做一个自动剪辑程序。我想按F10开始或停止自动单击。我该怎么做?如果用户当前打开了另一个程序,并且自动单击器被最小化,那么按键是否太可能?虽然我可以为您编写一整段代码,但我坚信没有什么比这更好 您只需实现KeyListener接口并使用该接口中所需的方法: 方法名称是不言自明的,并且显示了如何通过在每个片段中的注释来实现这些名称,以解释正在发生的事情 P>关于您的帖子,您可以考虑在项目中添加全局热键来启动/停止程序,只要根据程序的当前状态按下“代码> F10/CODE”。 关于你问
keylister
上使用。下面是链接中的一个简短声明(带有一些参数):
键侦听器作为键盘输入的低级接口有其地位,但对于响应单个键来说,键绑定更合适,并且往往会产生更易于维护的代码。如果要在组件没有焦点时激活键绑定,则键侦听器也很困难。键绑定的一些优点是,它们在某种程度上是自文档化的,考虑到包含层次结构,鼓励可重用的代码块(操作对象),并允许轻松删除、自定义或共享操作。此外,它们还可以轻松地更改操作绑定到的键。动作的另一个优点是,它们具有启用状态,这提供了一种简单的方法来禁用动作,而无需跟踪它连接到的组件
关于你的问题:
“我想按F10启动或停止自动单击。我该怎么做?”
您基本上希望将键绑定到框架的内容窗格。这将允许F10操作发生,无论关注哪个组件(只要使用正确的“InputMap”)
下面是一个例子。请务必阅读教程以获得进一步的解释
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.*;
public class KeyBindDemo {
private JButton clicker;
public KeyBindDemo() {
JFrame frame = new JFrame();
JPanel contentPane = (JPanel)frame.getContentPane();
addKeyBind(contentPane, "F10");
clicker = new JButton("Clicker");
contentPane.add(clicker);
frame.setLayout(new GridBagLayout());
frame.setSize(300, 300); // you should pack() instead.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Action disableButtonAction = new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
clicker.setEnabled(!clicker.isEnabled());
}
};
private static final String DISABLE_CLICKER = "disableClicker";
private void addKeyBind(JComponent contentPane, String key) {
InputMap iMap = contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap aMap = contentPane.getActionMap();
iMap.put(KeyStroke.getKeyStroke(key), DISABLE_CLICKER);
aMap.put(DISABLE_CLICKER, disableButtonAction);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new KeyBindDemo();
}
});
}
}
“如果用户当前打开了另一个程序,并且自动单击器最小化,是否也有可能获得按键?”
不太清楚这意味着什么。你需要给出更好的解释。“不太清楚这意味着什么。”我将其解读为“应用程序可以接收事件吗?当它不是重点应用程序时接收事件吗?”…答案是“否”。非常感谢!我很快会测试它。不要使用KeyListener。Swing设计用于键绑定。