如何使用JButton移动玩家对象?

时间:2013-10-24 19:00:14

标签: java swing jbutton actionlistener

如何使用在名为Program的类中创建的JButton访问我在名为Die的主类中创建的Player对象?

我现在的方向(在尝试了很多不同的方法之后)是在一个名为ButtonListener的单独类中创建ActionListener。

我的Player类内部是一个我想用JButton调用的方法:

public void roll(int steps) {
    setSteps(steps);
    System.out.println("Rolled: " + steps);
    move();
}

在我的Die课程中,我构建了JButton:

public class Die extends JPanel {

private List<Integer> die = new ArrayList<Integer>();
private ImageIcon  one, two, three, roll;
Random rand = new Random();
int dieValue = 0;
Player player = new Player();

 JButton dieButton;

/**
 * Constructor for creating the die button
 */
public Die(){
    addNumbersToDie();
    setDieImages();
    dieButton = new JButton();
    dieButton.addActionListener(new ButtonListener());
    dieButton.setIcon(roll);
    add(dieButton);
}

这是我的ButtonListener课程:

public class ButtonListener implements ActionListener {

    public void actionPerformed(ActionEvent arg0) {
        //Call out the roll() method.
    }
}

按下按钮时ActionListener工作正常,但我找不到如何在roll(int steps)类中调用Player方法的解决方案...

我可以在Player类中创建按钮,但这样太乱了,所以我正在寻找更好的方法。

整个想法是让玩家随着我的JButton移动。

从我的主要类Program添加了代码:

// Create board.
    Board board = new Board();

    // Create new player.
    Player player = new Player();

    // Add player to start.
    board.getStart().enterField(player);

    // Check if player is on board.
    drawBoard(board);

1 个答案:

答案 0 :(得分:2)

您可以为侦听器创建一个构造函数,该构造函数将播放器作为参数。

public class ButtonListener implements ActionListener {

    private Player p;

    public ButtonListener(Player p){
      this.p = p;
    }
    public void actionPerformed(ActionEvent arg0) {
        p.roll();
    }
}

然后就这样做:

dieButton.addActionListener(new ButtonListener(player));