首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,ActionListener

Java,ActionListener
EN

Stack Overflow用户
提问于 2018-04-22 09:55:14
回答 1查看 35关注 0票数 0

我在写简单的扫雷游戏。我使用了两个二维阵列,一个是持有JButton,第二个阵列是否是炸弹在里面.

代码语言:javascript
复制
JButton[][] tab = new JButton[8][8];
int[][] mine = new int[8][8];

在ActionLister中,我正在检查实际单击哪个按钮,以及里面是否有炸弹。

代码语言:javascript
复制
public void actionPerformed(ActionEvent e) {
    if(e.getSource()==tab[0][0] && mine[0][0]==9) {
        tab[0][0].setText("B");
        tab[0][0].setEnabled(false);
    }
    if(e.getSource()==tab[0][1] && mine[0][1]==9) {
        tab[0][1].setText("B");
        tab[0][1].setEnabled(false);
    }
    if(e.getSource()==tab[0][2] && mine[0][2]==9) {
        tab[0][2].setText("B");
        tab[0][2].setEnabled(false);
    }

9表示里面有炸弹。

我不想写64行这样的代码。我怎么才能改变这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-22 10:06:41

由于我假设您使用的是Java 8(或更高版本),这应该是最简单的解决方案:

代码语言:javascript
复制
//code to create buttons and to place them on the frame / panel
for(int y = 0; y < 8; y++){
    for(int x = 0; x < 8; x++){
        JButton b = new JButton();
        //place the JButton on your frame / panel
        //probably you are using a GridLayout
        b.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(mine[y][x] == 9){
                    b.setText("B");
                    b.setEnabled(false);
                }
            }
        });
    }
}

这样您就不必保存所有的按钮,因为您可以从ActionListener内部访问按钮变量。

当您使用Java 7(或更早版本)时,您必须将按钮变量声明为最终变量。

代码语言:javascript
复制
final JButton b = new JButton();

或者,您也可以将源强制转换为JButton,以便从动作侦听器中访问源组件。

代码语言:javascript
复制
public void actionPerformed(ActionEvent e){
    JButton b = (JButton)e.getSource();
    b.setText("B");
    b.setEnabled(false);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49964651

复制
相关文章

相似问题

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