【发布时间】:2014-03-23 01:48:54
【问题描述】:
我正在 java 中制作一些东西,当按下 F1 键时会出现一个 JDialog 窗口。我当前的代码:
public class Keyboard implements KeyListener {
private boolean[] keys = new boolean[120];
public boolean up, down, left, right, assets;
public void tick() {
assets = keys[KeyEvent.VK_F1];
}
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}
public void keyTyped(KeyEvent e) {
}
}
并且在我的主类中的 tick() 方法下:
keyboard.tick();
if(keyboard.assets) ac.run();
keyboard 变量指的是键盘类,而 ac 变量指的是这个类:
public class AssetsChooser extends JDialog {
JFileChooser fc = new JFileChooser();
public void run() {
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
add(fc);
System.out.println("It works.");
}
}
当我运行游戏并按 F1 时,没有出现 JDialog 窗口,控制台也没有显示方法。
【问题讨论】:
-
有些人可能会质疑我设置 KeyListener 和 KeyEvent 的方式,但我向您保证几乎完全相同的代码在我正在制作的不同程序中工作。
-
什么是
assets?当您只关心F1键时,为什么需要跟踪每个键?在您的keyPressed(KeyEvent)中,为什么不直接使用if(e.getKeyCode() == KeyEvent.VK_F1){ //open dialog }? -
你在哪里定义
assets? -
1.资产类似于我的世界纹理包,我的游戏中的纹理和声音可以通过选择 JFileChooser 提供的不同资产文件夹进行自定义
-
这可能不起作用的原因有很多,最有可能与 KeyListener 仅在其注册的组件可聚焦并且具有键盘焦点时才会响应键事件有关
标签: java swing keylistener jdialog keyevent