Невозможно отобразить скрытую игровую консоль - PullRequest
0 голосов
/ 18 марта 2019

Привет. Я пытаюсь создать игровую консоль для инструментов разработчика. Я хочу иметь возможность переключать его видимость нажатием клавиши, из того, что я прочитал, скажите мне, если я ошибаюсь, я должен использовать привязку клавиш и сделать консоль JDialog, а не Jframe.

Итак, я создал игровое окно JFrame и создал внутри него игровой холст JPanel, затем консоль JDialog внутри него, с видимостью, установленной в ложь.

Внутри игрового холста я также создаю экземпляр класса ShowConsole, который расширяет AbstractAction и передается объекту console, с которым конструктор назначает локальную переменную для работы, и выполняемое действие для setVisibilty для console в true .

Затем я использую getInputMap для сопоставления ключа home с именем действия, затем использую getActionMap для сопоставления имени действия с объектом действия ShowConsole.

Теперь кто-то сказал, что мне нужно будет поместить еще одну привязку клавиш в консоль, чтобы скрыть ее, когда она имеет фокус, но я даже не могу заставить ее отображаться, если у меня нет он создан с видимостью true.

Это говорит о том, что он создается, и проблема должна быть связана с привязкой ключа или действием, хотя ошибки не отображаются, может кто-нибудь объяснить, что мне не хватает, или если есть лучший способ ...

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
		
	}
	
}
...