无法显示隐藏的游戏机

时间:2019-03-18 19:08:10

标签: java visibility key-bindings jdialog

嗨,我正在尝试为开发人员工具创建游戏控制台。我希望能够通过按一下按键来切换其可见性,从阅读的内容来看,告诉我是否错误,我应该使用按键绑定,并且应该使控制台成为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
		
	}
	
}

0 个答案:

没有答案