【问题标题】:Alternate displayed image交替显示的图像
【发布时间】:2015-08-31 06:09:46
【问题描述】:

我正在玩井字游戏,我的想法是,在我第一次单击一个按钮时,它会显示图像“X”,如果我单击其他按钮,它会显示图像“O”......然后它会继续,交替显示图像。我也尝试过单击按钮,它会显示一张图像,但如果我再次单击该按钮,图像就会消失。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;


public class XOButton extends JButton implements ActionListener{
  ImageIcon X;
  ImageIcon O;
  byte value=0;
  byte k=0;

public XOButton(){
    try {
        X=new ImageIcon(this.getClass().getResource("X.png"));
        O=new ImageIcon(this.getClass().getResource("O.png"));
        addActionListener(this);

    } catch (NullPointerException e) {
        System.out.println("The image is not Available");
    }

}

@Override
public void actionPerformed(ActionEvent e) {
    value++;
    value %= 2;


    if( k%2 == 0) { 

        switch(value){
            case 0:
                setIcon(null);
                break;
            case 1:
                setIcon(X);
                System.out.println("KX= " + k);
                break;
        }
        k++;
    }


    else {  

        switch(value){
            case 0:
                setIcon(null);
                break;
            case 1:
                setIcon(O);
                System.out.println("K0= " + k);
                break;
        }
        k++;
    }
    }

}

【问题讨论】:

  • ......你好?

标签: java swing user-interface jframe


【解决方案1】:

你的逻辑被打破了,我看到的主要问题是每个 XOButton 都有自己的 ActionListener,它完全独立于所有其他的,所以只要按下任何按钮,value int 将始终等于 0第一次,无论之前按下的按钮的状态如何。

我建议

  • 您不扩展 JButton 而是使用 JButtons
  • 您为所有 JButton 提供 相同 Action 或 ActionListener
  • 此侦听器存储最后一次按下按钮的 xo 状态
  • 此侦听器检查当前按下的按钮是否处于 null、X 或 O 状态,然后采取相应措施。

有关使用图像图标的有效井字游戏程序示例,请查看this answer of mine 的类似问题。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 2021-10-12
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多