У меня есть JFrame с 3 панелями. Я расширяю класс приложения, а затем добавляю к нему три панели, например:
JPanel controlButtonsPanel = new GameControlButtons();
controlButtonsPanel.setPreferredSize(new Dimension(801,60));
controlButtonsPanel.setBorder(new LineBorder(Color.white, 1));
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.weightx = 2;
constraints.weighty = 0.3;
this.add(controlButtonsPanel, constraints);
JPanel tempP = new JPanel();
/`/ *** I'm going to create a Jpanel subclass for this, too, I just haven't yet.`
tempP.setPreferredSize(new Dimension(500,838));
tempP.setBorder(new LineBorder(Color.white, 2));
constraints.anchor = GridBagConstraints.NORTHEAST;
constraints.weightx = 1;
constraints.weighty = 2;
this.add(tempP, constraints);
JPanel graphicsPanel = new RoofRunnerGame("Ken");
constraints.anchor = GridBagConstraints.SOUTHWEST;
constraints.weightx = 2;
constraints.weighty = 1;
graphicsPanel.setBorder(new LineBorder(Color.white, 1));
graphicsPanel.setPreferredSize(new Dimension(800,800));
graphicsPanel.requestFocus();
this.add(graphicsPanel, constraints);
Я расширил JPanel для классов GameControlButtons и RoofRunnerGame. Я добавил мышеловат к первому. И я добавил слушателя мыши и ключевого слушателя к последнему.
** Проблема: слушатели мыши работают нормально для обоих, но ключевой слушатель, кажется, не слушает в моей панели RoofRunnerGame. **
В сети я нашел два возможных исправления, но сначала хотел спросить.
1) Один из них вызывал requestFocus () в подклассе RoofRunnerGame. Проблема в том, что когда я нажимаю на другую панель, она теряет фокус. (Это краткосрочное исправление.)
2) Другая вещь, о которой упоминалось, заключалась в использовании привязок клавиш. Я никогда не использовал их раньше. Я сделаю это, если вы порекомендуете это, но предпочли бы продолжать использовать keyListener, если это возможно.
Итак, что вы думаете? Есть ли способ сохранить панель RoofRunnerGame для прослушивания KEY повсюду?