yj2*_*000 1 java swing keylistener
我试图使程序在单击按钮ESC时响应,以便它可以处理jframe。我不确定是什么问题,但似乎在主菜单的if语句中。
*注意:te是类的对象名称(文本编辑器)
这部分是主要方法
f.add(text);
f.addKeyListener(te);
f.setVisible(true);
while(true){
if (exiting == true){
f.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
这部分超出主要方法
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE){
exiting = true;
}
}
Run Code Online (Sandbox Code Playgroud)
KeyListener通常不要使用s,它们所连接的组件必须具有键盘焦点才能被触发。
而是使用按键绑定...
InputMap im = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getRootPane().getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");
am.put("cancel", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见如何使用键绑定。
由于ActionAPI 的强大功能,我将创建一个基本的“ dispose”操作以以下内容开始:
public class DisposeWindowAction extends AbstractAction {
private Window window;
public DisposeWindowAction(Window window) {
this.window = window;
putValue(NAME, "Dispose");
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, 0));
}
public Window getWindow() {
return window;
}
@Override
public void actionPerformed(ActionEvent e) {
getWindow().dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将其绑定到ActionMap...
am.put("cancel", new DisposeWindowAction(this));
Run Code Online (Sandbox Code Playgroud)
你为什么问?因为您然后可以Action在JMenuItems和s中使用相同的JButton内容...。
JButton disposeButton = new JButton(new DisposeWindowAction(this));
...
Run Code Online (Sandbox Code Playgroud)
(您可以使用的相同实例Action,但您会明白这一点),现在用户可以使用三种类似的方式来处理窗口...
有关更多详细信息,请参见如何使用动作。
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |