繁体   English   中英

JButton在点击时更改JButton文本

[英]JButton to change JButton text on click

我正在创建一个reversi游戏,想知道如何在点击时将按钮文本从B更改为W,反之亦然。

我尝试在我的forloop中添加动作列表器,为游戏创建我的棋盘,当我点击标有W的按钮时,它将整个第一行按钮改为B。 我想要它做什么它只改变点击按钮到相反,如果B最初点击更改为W后

                                if (src == buttonPos[x][y]
                                        && buttonPos[x][y].getText() == currentPlayer) {
                                    buttonPos[x][y].setText("W");
                                } else {
                                    buttonPos[x][y].setText("B");
                                }

预期输出是单击的按钮将更改为相反的字母,因此如果b最初它将更改为W.

我想要它做什么只改变点击按钮到相反的方向

您的ActionListener代码太复杂了。 不需要循环代码。 您已经知道按钮的来源,因此您只需将if / else逻辑应用于该按钮即可。

此外,无需创建多个ActionListener。 所有按钮的逻辑都相同,因此您可以与每个按钮共享相同的ActionListener。

所以你的代码可能看起来像:

ActionListener al = new ActionListener() 
{
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        JButton src = (JButton) e.getSource();
        String text = button.getText();
        button.setText( text.equals("W") ? "B" : "W" );
    }
});

for (int x = 0; x < buttonPos.length; x++) {
    for (int y = 0; y < buttonPos[x].length; y++) {
        buttonPos[x][y] = new JButton();
        reversiBoard.add(buttonPos[x][y]);
        buttonPos[x][y].addActionListener( al ); // changed
    }
}

您无需遍历actionPerformed()方法中的所有按钮。 还要记住,在检查对象之间的相等性时,应该使用object.equals()而不是==运算符。

用以下内容替换actionPerformed()方法:

public void actionPerformed(ActionEvent e){
    JButton button = (JButton) e.getSource();
    button.setText(“W”.equals(button.getText()) ? “B” : “W”);
}

这是整个文件。 我已经将听众转移到一个单独的方法,感觉更清洁。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Board {
    private final JButton[][] buttonPos = new JButton[8][8];
    private JPanel reversiBoard = new JPanel();
    private String currentPlayer;

    public Board() {
        currentPlayer = "B";
        JFrame frame = new JFrame();
        frame.getContentPane().add(reversiBoard);
        reversiBoard.setLayout(new GridLayout(8, 8, 2, 2));
        for (int x = 0; x < buttonPos.length; x++) {
            for (int y = 0; y < buttonPos[x].length; y++) {
                JButton button = new JButton();
                reversiBoard.add(button);
                button.addActionListener(this::changeButtonOwner);
                buttonPos[x][y] = button;
            }
        }
        frame.setSize(500, 500);
        frame.setVisible(true);
        buttonPos[4][3].setText("W");
        buttonPos[3][3].setText("B");
        buttonPos[4][4].setText("B");
        buttonPos[3][4].setText("W");
    }

    private void changeButtonOwner(ActionEvent e) {
        JButton src = (JButton) e.getSource();
        if (src.getText().equals("B")) src.setText("W");
        else if (src.getText().equals("W")) src.setText("B");
    }

    public JPanel getPanel() {
        return reversiBoard;
    }
}

暂无
暂无

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

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