替代显示的图像

时间:2015-08-30 19:52:25

标签: java swing user-interface jframe

我正在做一个TicTacToe,我的想法是,在我第一次点击一个按钮时它显示图像“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++;
    }
    }

}

1 个答案:

答案 0 :(得分:1)

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

我建议

  • 您不会扩展JButton而是使用JButtons
  • 你给所有JButton的相同的 Action或ActionListener
  • 该侦听器按
  • 存储最后一个按钮的xo状态
  • 该侦听器检查当前按下的按钮是处于null,X或O状态,然后相应地采取行动。

有关使用图片图标的正在运行的Tic Tac Toe程序的示例,请查看类似问题的this answer of mine