Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向程序添加键绑定_Java_Swing_Jframe_Key Bindings - Fatal编程技术网

Java 向程序添加键绑定

Java 向程序添加键绑定,java,swing,jframe,key-bindings,Java,Swing,Jframe,Key Bindings,我现在正在做一个自动剪辑程序。我想按F10开始或停止自动单击。我该怎么做?如果用户当前打开了另一个程序,并且自动单击器被最小化,那么按键是否太可能?虽然我可以为您编写一整段代码,但我坚信没有什么比这更好 您只需实现KeyListener接口并使用该接口中所需的方法: 方法名称是不言自明的,并且显示了如何通过在每个片段中的注释来实现这些名称,以解释正在发生的事情 P>关于您的帖子,您可以考虑在项目中添加全局热键来启动/停止程序,只要根据程序的当前状态按下“代码> F10/CODE”。 关于你问

我现在正在做一个自动剪辑程序。我想按F10开始或停止自动单击。我该怎么做?如果用户当前打开了另一个程序,并且自动单击器被最小化,那么按键是否太可能?虽然我可以为您编写一整段代码,但我坚信没有什么比这更好

您只需实现KeyListener接口并使用该接口中所需的方法:

方法名称是不言自明的,并且显示了如何通过在每个片段中的注释来实现这些名称,以解释正在发生的事情

<> P>关于您的帖子,您可以考虑在项目中添加全局热键来启动/停止程序,只要根据程序的当前状态按下“代码> F10/CODE”。 关于你问题的第二部分,我没有直接的答案,因为我还没有遇到过这样的情况。然而,我四处搜寻,发现这似乎涵盖了你的问题,如果没有,也看看这个,第二个问题提出了我给你的想法,使用一个全局热键,但这必须写进去

希望这有助于你找到正确的标签()。使用Swing时,通常需要在较低级别
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设计用于键绑定。