繁体   English   中英

Getter 和 setter 不适用于 JButton

[英]Getter and setter not working for JButton

我正在创建一个迷宫,可以使用箭头键移动玩家。 当程序启动时,会创建一个包含两个 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 工作并启用按钮,我必须更改什么?

感谢您在评论中的帮助。 一个问题是事实上它必须是

private Menu menu;

对于第二部分,要禁用按钮,使用下面的代码就足够了,所以不需要使用 setter。

menu.getOne_step_back().setEnabled(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM