嗨,我正在尝试为开发人员工具创建游戏控制台。我希望能够通过按一下按键来切换其可见性,从阅读的内容来看,告诉我是否错误,我应该使用按键绑定,并且应该使控制台成为JDialog而不是Jframe。
所以我创建了JFrame游戏窗口,并在其中创建了一个JPanel游戏画布,然后在其中创建了JDialog控制台,其可见性设置为false。
在游戏画布中,我还创建了ShowConsole类的实例,该实例扩展了AbstractAction,并传递了控制台对象,该对象被构造函数分配给要使用的局部变量,并且执行的操作是将consoleVisibilty设置为true
然后,我使用getInputMap将主键映射到操作名称,然后使用getActionMap将操作名称映射到ShowConsole操作对象。
现在有人说我将需要在控制台内放置另一个键绑定,以便在它具有焦点时隐藏它,但是除非我有,否则我什至无法显示它。它创建的可见性为真。
这告诉我正在创建它,问题一定出在键绑定或操作上,尽管没有显示错误,有人可以解释我所缺少的内容还是有更好的方法...
public class GameWindow extends JFrame {
public GameCanvas gamecanvas;
public GameWindow() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize( 400, 400);
setResizable(true);
setTitle("Lab World");
setLocationRelativeTo(null);
setLayout(new GridLayout (1, 1));
setVisible(true);
setFocusable(true);
gamecanvas = new GameCanvas();
add(gamecanvas);
}
public static void main(String[] args) {
GameWindow gamewindow = new GameWindow();
}
}
public class GameCanvas
extends Canvas{
public Console console;
public Action showconsole;
public GameCanvas() {
console = new Console();
showconsole = new ShowConsole(console);
getInputMap(WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("VK_HOME"), "homepressed");
getActionMap().put("homepressed", showconsole);
}
}
public class ShowConsole extends AbstractAction {
public Console console;
public ShowConsole(Console c){
console = c;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (console.isVisible() == false) {
console.setVisible(true);
}
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
// TODO Auto-generated method stub
}
@Override
public Object getValue(String key) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return false;
}
@Override
public void putValue(String key, Object value) {
// TODO Auto-generated method stub
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
// TODO Auto-generated method stub
}
@Override
public void setEnabled(boolean b) {
// TODO Auto-generated method stub
}
}