在Java中单击了哪个按钮?

时间:2017-03-16 14:24:08

标签: java

我在高中Java编程课的战舰游戏中工作(到目前为止还不是很糟糕)。到目前为止,我有计算机和播放器的游戏板,我已经为计算机生成了船只,并确保玩家可以沉没它们。两块电路板都有一个网格布局,每个电路板都分配给一个二维阵列,用于播放器和计算机,并且是特定网格布局的一部分(说实话,我不是很了解很多代码因为它是由我们的老师提供的,所以我无法确定哪些部分是相关的,哪些部分不相关 - 这也是我不发布任何代码的原因。

我现在要做的是让玩家通过点击棋盘让他们选择起始位置来放置他们的船只。

inside of a for loop
            1: a button in buttonsPlayer is clicked
            2: when a button is clicked, the two coordinates are calculated and stored as x, y coordinates 
            3: a ship is generated with the starting coordinates of x, y

我知道如何使用随机的x和y起始坐标生成一艘船,就像我之前做过的那样。有没有办法在单击按钮后在数组中获取按钮的数字?

(我确实在这里阅读了其他5个线程似乎问了同样的问题,但我并没有真正得到任何答案)

3 个答案:

答案 0 :(得分:0)

您可以创建一个extends JButton的类,并向JButton添加更多功能,如下所示:

public class BoardPiece extends JButton{
     private int x,y;
     //rest of class including getters and setters
}

这将带来JButton的所有功能,您可以添加关于每个方块的元数据

然后在您的事件监听器中,您可以像这样致电.getX().getY()

boardPiece.addActionListener((e)->{
    BoardPiece clicked = (BoardPiece)e.getSource();
    int x = clicked.getX();
    // and so on

});

答案 1 :(得分:0)

JButton有一个'动作命令',它允许你将信息放入其中以区别于其他按钮。

使用

JButton.setActionCommand
JButton.getActionCommand

因此,如果您对该字符串中该按钮的坐标进行编码,则可以在actionListener中

JButton b = (JButton) eventListener.getSource();

String cmd = b.getActionCommand();

然后处理该cmd字符串以确定您在电路板上的位置。

答案 2 :(得分:0)

您可以为JButton提供一个ActionCommand,例如

    JButton button1 = new JButton("Button 1");
    button1.setActionCommand("Button1id");`

然后,如果您实现ActionListener来监听按钮,则可以编写类似

的代码
    @Override
    public void actionPerformed(ActionEvent ae) {
        String buttonid = ae.getActionCommand();
    }

通过检查buttonid的值,您将知道按下了哪个按钮。