我正在創建一個迷宮,可以使用箭頭鍵移動玩家。當程式啟動時,會創建一個包含兩個 JPanel 選單和 MazePanel 的框架。選單有一個“退一步”按鈕,允許玩家撤消最后一步。
在第一次移動之前和單擊一次之后,應使用“setEnable(false)”禁用此按鈕。點擊它后,如果玩家再次移動,它應該再次啟用。
Player 類包含 boolean clickable = false 并在每次移動后將其設定為 true。
這就是框架的創建方式。請注意,mazepanel 將選單實體作為引數獲取。
public class Main extends JFrame {
public Main(){
frame = new JFrame();
menu = new Menu();
frame.add(menu);
mazepanel = new MazePanel(frame, menu);
frame.add(mazepanel);
}
}
Button 在 Menu 類的建構式中創建和禁用,并創建了一個 getter 和 setter。
public class Menu extends JPanel {
private JButton one_step_back;
public Menu() {
one_step_back = new JButton("One step back");
one_step_back.setEnabled(false);
}
public JButton getOne_step_back() {
return one_step_back;
}
public void setOne_step_back(JButton one_step_back) {
this.one_step_back = one_step_back;
}
}
MazePanel 類如下所示:
public class MazePanel extends JPanel {
private JFrame frame;
private JPanel menu;
public MazePanel(JFrame frame, JPanel menu) {
this.frame = frame;
this.menu = menu;
play = new Player();
}
public JPanel getMenu() {
return menu;
}
public void setMenu(JPanel menu) {
this.menu = menu;
}
}
還有 Player 類:每次按下鍵時,Keylistener 都會呼叫函式 move。在這種情況下,我只是使用一個鍵來保持簡短。
每當進行移動時,我都會嘗試從 Player 類中禁用選單中的按鈕。馬上。現在,我只是想在移動后激活按鈕,所以不要擔心在單擊后取消激活按鈕。
public class Player implements KeyListener{
boolean clickable = false;
private JPanel menu;
public Player(){
menu = panel.getMenu();
}
public void move() {
clickable = true;
menu.setOne_step_back(getOne_step_back().setEnable(clickable));
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
move();
}
}
}
但是,Player 類中的這一行
menu.setOne_step_back(getOne_step_back().setEnable(clickable));
得到以下問題:方法 getOne_step_back() 未定義 Player 型別。
如果我只是使用
menu.getOne_step_back();
我得到以下資訊:
對于 JPanel 型別,方法 One_step_back() 未定義。
為了使 getter 和 setter 作業并啟用按鈕,我必須更改什么?
uj5u.com熱心網友回復:
感謝您在評論中的幫助。一個問題是事實上它必須是
private Menu menu;
對于第二部分,要禁用按鈕,使用下面的代碼就足夠了,所以不需要使用 setter。
menu.getOne_step_back().setEnabled(true);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495666.html
上一篇:無法獲得絕對的JLabel位置
下一篇:無法動態重繪JTable