1

我只得到了打印到小程序的错误条件。我假设我的嵌套 if 语句有问题?

ClickableBox.Java

public class ClickableBox extends MouseAdapter {

  private int x, y, width, height;
  private Color borderColor, backColor, oldColor;
  private boolean drawBorder, clicked, isX;
  private Container parent;
  TheGame game;

  public ClickableBox(int x, int y, int width, int height, Color borderColor,
      Color backColor, boolean drawBorder, TheGame parent) {

    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.borderColor = borderColor;
    this.backColor = backColor;
    this.drawBorder = drawBorder;
    this.parent = parent;

  }

  public void draw(Graphics g) {

    oldColor = g.getColor();
    g.setColor(backColor);
    g.fillRect(x, y, width, height);
    if (drawBorder) {
      g.setColor(borderColor);
      g.drawRect(x, y, width, height);
    }
    g.setColor(oldColor);
  }

  public void mouseReleased(MouseEvent e) {

    if (x < e.getX() && e.getX() < x + width && y < e.getY()
        && e.getY() < y + height) {
      clicked = true;
      setX(!isX);
      parent.repaint();

    }
  }

  public boolean isClicked() {
    return clicked;
  }

  public int getX() {
    return x;
  }

  public void setX(int x) {
    this.x = x;
  }

  public int getY() {
    return y;
  }

  public void setY(int y) {
    this.y = y;
  }

  public int getWidth() {
    return width;
  }

  public void setWidth(int width) {
    this.width = width;
  }

  public int getHeight() {
    return height;
  }

  public void setHeight(int height) {
    this.height = height;
  }

  public Color getBorderColor() {
    return borderColor;
  }

  public void setBorderColor(Color borderColor) {
    this.borderColor = borderColor;
  }

  public Color getBackColor() {
    return backColor;
  }

  public void setBackColor(Color backColor) {
    this.backColor = backColor;
  }

  public boolean isDrawBorder() {
    return drawBorder;
  }

  public void setDrawBorder(boolean drawBorder) {
    this.drawBorder = drawBorder;
  }

  public boolean isX() {
    return isX;
  }

  public void setX(boolean isX) {
    this.isX = isX;
  }

}

TicTacToeBox.Java

 public class TicTacToeBox extends ClickableBox {

  Container parent;
  TheGame game;

  public TicTacToeBox(int x, int y, int width, int height, Color borderColor,
      Color backColor, boolean drawBorder, TheGame parent) {
    super(x, y, width, height, borderColor, backColor, drawBorder, parent);

    this.parent = parent;

  }

  public void draw(Graphics g) {

    if (isClicked()) {
      if (super.isX()) {
        g.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight());
        g.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight());
        if (isDrawBorder()) {
          g.drawRect(getX(), getY(), getWidth(), getHeight());
        }
      } else {
        g.drawOval(getX() + 3, getY() + 3, getWidth() - 6, getHeight() - 6);
        if (isDrawBorder()) {
          g.drawRect(getX(), getY(), getWidth(), getHeight());
        }
      }
    } else {
      g.drawRect(getX(), getY(), getWidth(), getHeight());
    }
  }

}

这也是实际的小程序代码...... TheGame.java

public class TheGame extends Applet {

  private final int START_X = 20;
  private final int START_Y = 40;
  private final int ROWS = 3;
  private final int COLS = 3;
  private final int BOX_WIDTH = 70;
  private final int BOX_HEIGHT = 70;

  private TicTacToeBox boxes[][];

  private Button resetButton;
  private boolean isX;

  private boolean blank;

  public void init() {
    boxes = new TicTacToeBox[ROWS][COLS];

    resize(300, 300);
    buildBoxes();

    resetButton = new Button("Reset Game");
    resetButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {

        buildBoxes();
        repaint();
      }
    });
    add(resetButton);
  }

  public void paint(Graphics g) {
    // loop through the boxes rows

    setX(!isX);
    // System.out.println(isX());

    for (int row = 0; row < boxes.length; row++) {
      for (int col = 0; col < boxes[row].length; col++) {

        boxes[row][col].draw(g);

        if (boxes[row][col].isClicked()) {

        }
      }
    }

  }

  private void buildBoxes() {

    for (int row = 0; row < boxes.length; row++) {
      for (int col = 0; col < boxes[row].length; col++) {
        boxes[row][col] = new TicTacToeBox(START_X + col * BOX_WIDTH, START_Y
            + row * BOX_HEIGHT, BOX_WIDTH, BOX_HEIGHT, Color.black,
            Color.white, true, this);
        addMouseListener(boxes[row][col]);

      }
    }
  }

  public boolean isX() {
    return isX;
  }

  public void setX(boolean isX) {
    this.isX = isX;
  }

  public boolean isBlank() {
    return blank;
  }

  public void setBlank(boolean blank) {
    this.blank = blank;
  }

}

任何关于我如何让条件从真到假交替并实际输出我对每个条件的输入的任何输入都将不胜感激。

4

1 回答 1

5

你不断地重新实例化 TheGame,这就是为什么你总是得到相同的 if 分支。game应该是你封闭类的成员而不是局部变量,你应该在你的构造函数中初始化它:

public class TicTacToeBox {
    private TheGame game;

    // I am guessing your constructor is something like this (but it is just guessing)
    public TicTacToeBox(int i, int j , int k , int l, Color c1, Color c2, boolean b, TheGame game) {
         ...
         this.game = game;
    }
    ...
    public void draw(Graphics g) {
        // TheGame game = new TheGame();
        ...
    }
于 2012-04-25T13:52:48.537 回答