Java Swing键绑定单独的文件
好的,这是我的问题。我已经试了两天把我的密钥绑定放在一个单独的文件中,让它们在我的主服务器上工作。我是swing新手,正在通过解构代码来学习。但是,如果我将代码添加到同一个文件中,我可以让它正常工作,但是为了清洁起见,我想将它们单独放在一个文件中。我的问题是它读取没有错误,但是密钥绑定在备用文件中不起作用,我已经尝试、扩展并正在使用组件,但我对它知之甚少。我做错了什么?有什么建议吗?我只是想让逃生钥匙关上窗户 //主代码Java Swing键绑定单独的文件,java,swing,file,key-bindings,Java,Swing,File,Key Bindings,好的,这是我的问题。我已经试了两天把我的密钥绑定放在一个单独的文件中,让它们在我的主服务器上工作。我是swing新手,正在通过解构代码来学习。但是,如果我将代码添加到同一个文件中,我可以让它正常工作,但是为了清洁起见,我想将它们单独放在一个文件中。我的问题是它读取没有错误,但是密钥绑定在备用文件中不起作用,我已经尝试、扩展并正在使用组件,但我对它知之甚少。我做错了什么?有什么建议吗?我只是想让逃生钥匙关上窗户 //主代码 import java.awt.*; import java.awt.ev
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组件都在组件类本身中创建绑定。绑定用于组件,属于组件类,因为键绑定用于实现组件的功能。如果要创建可重用的
转义动作
,请查看:以获取创建任何应用程序共享的操作的示例。通过定义“加速器”,当您将操作添加到菜单项时,将自动为您构建键绑定。@VGRJComponent。当聚焦窗口中的聚焦窗口
允许在窗口本身有聚焦时执行键绑定,这与KeyListener
不同,谢谢大家,您的输入很有帮助。我将检查关闭应用程序链接,并考虑返回到关键侦听器。再次感谢