首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击JButton更改JButton文本

单击JButton更改JButton文本
EN

Stack Overflow用户
提问于 2019-05-04 14:31:36
回答 3查看 924关注 0票数 0

我正在创建一个reversi游戏,并想知道如何改变按钮文本从B到W或反之亦然的点击。

我尝试在我的forloop中添加动作列表,它为游戏创建了我的棋盘。当我单击一个标记为W的按钮时,它将整个第一行按钮更改为B‘。我想要做的是,如果B在单击后更改为W,则只将单击的按钮更改为相反的按钮。

代码语言:javascript
复制
                                if (src == buttonPos[x][y]
                                        && buttonPos[x][y].getText() == currentPlayer) {
                                    buttonPos[x][y].setText("W");
                                } else {
                                    buttonPos[x][y].setText("B");
                                }

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-04 14:53:04

我想要它做的只是将单击的按钮更改为相反的按钮。

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

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

因此,您的代码可能如下所示:

代码语言:javascript
复制
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
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-04 14:53:43

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

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

代码语言:javascript
复制
public void actionPerformed(ActionEvent e){
    JButton button = (JButton) e.getSource();
    button.setText(“W”.equals(button.getText()) ? “B” : “W”);
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-04 14:59:41

这是整个文件。我已经把听者转移到了一个单独的方法,感觉更干净。

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55983560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档