[英]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.