Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 Swing键绑定单独的文件_Java_Swing_File_Key Bindings - Fatal编程技术网

Java Swing键绑定单独的文件

Java Swing键绑定单独的文件,java,swing,file,key-bindings,Java,Swing,File,Key Bindings,好的,这是我的问题。我已经试了两天把我的密钥绑定放在一个单独的文件中,让它们在我的主服务器上工作。我是swing新手,正在通过解构代码来学习。但是,如果我将代码添加到同一个文件中,我可以让它正常工作,但是为了清洁起见,我想将它们单独放在一个文件中。我的问题是它读取没有错误,但是密钥绑定在备用文件中不起作用,我已经尝试、扩展并正在使用组件,但我对它知之甚少。我做错了什么?有什么建议吗?我只是想让逃生钥匙关上窗户 //主代码 import java.awt.*; import java.awt.ev

好的,这是我的问题。我已经试了两天把我的密钥绑定放在一个单独的文件中,让它们在我的主服务器上工作。我是swing新手,正在通过解构代码来学习。但是,如果我将代码添加到同一个文件中,我可以让它正常工作,但是为了清洁起见,我想将它们单独放在一个文件中。我的问题是它读取没有错误,但是密钥绑定在备用文件中不起作用,我已经尝试、扩展并正在使用组件,但我对它知之甚少。我做错了什么?有什么建议吗?我只是想让逃生钥匙关上窗户

//主代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;



public class S extends bttns{
    private JFrame mainFrame;
    private JPanel controlPanel;
    private JLabel headerLabel;
       private JLabel statusLabel;
       
      
    
    public S(){
    
          prepareGUI();
          setUpKeyBindings();
          
       }
    
       public static void main(String[] args){
          S  swingListenerDemo = new S();  
          S s = new S();
           key(s);
       }
       private void prepareGUI(){
           
          mainFrame = new JFrame("Java SWING Examples");
          mainFrame.setSize(400,400);
          mainFrame.setLayout(null);

          headerLabel = new JLabel("OY" );
          headerLabel.setBounds(150,150,100,130);
          statusLabel = new JLabel("",JLabel.CENTER);        
          statusLabel.setSize(350,100);
          
          mainFrame.addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent windowEvent){
                System.exit(0);
             }        
          });    
          controlPanel = new JPanel();
          controlPanel.setLayout(new FlowLayout());

          mainFrame.add(headerLabel);
          mainFrame.add(controlPanel);
          mainFrame.add(statusLabel);
          mainFrame.setVisible(true);  
       }    

    

}
//这是备用文件

    import java.awt.event.KeyEvent;

import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.KeyStroke;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;


public class bttns extends JComponent {

    public  bttns() {
        // TODO Auto-generated constructor stub
    

    
    
    setUpKeyBindings();
    }
    
    
    public static void key(JComponent component) {
        Action test = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        };
        component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "test");
        component.getActionMap().put("test", test);

    }
    public void setUpKeyBindings() {
          int condition = WHEN_ANCESTOR_OF_FOCUSED_COMPONENT;
          InputMap inputMap = getInputMap(condition);
          ActionMap actionMap = getActionMap();
          
          


          KeyStroke scape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0);

          
                  
        inputMap.put(scape, scape.toString());
        actionMap.put(scape.toString(), new escAction());


       
       
       
       }
    public class escAction extends AbstractAction{
        @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
    }
}

只有组件可以接收关键事件。1) 类名应该以大写字符开头2)类名应该是描述性的3)只有在向类添加功能时才扩展类。4) 我不知道为什么要创建两个“S”类的实例。我已经尝试了两天将我的键绑定放在一个单独的文件中——所有Swing组件都在组件类本身中创建绑定。绑定用于组件,属于组件类,因为键绑定用于实现组件的功能。如果要创建可重用的
转义动作
,请查看:以获取创建任何应用程序共享的操作的示例。通过定义“加速器”,当您将操作添加到菜单项时,将自动为您构建键绑定。@VGR
JComponent。当聚焦窗口中的聚焦窗口
允许在窗口本身有聚焦时执行键绑定,这与
KeyListener
不同,谢谢大家,您的输入很有帮助。我将检查关闭应用程序链接,并考虑返回到关键侦听器。再次感谢