Привет. Я пытаюсь создать игровую консоль для инструментов разработчика. Я хочу иметь возможность переключать его видимость нажатием клавиши, из того, что я прочитал, скажите мне, если я ошибаюсь, я должен использовать привязку клавиш и сделать консоль 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
}
}