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;
  }

}

条件を true から false に変更し、各条件に対して持っているものを実際に出力する方法についての入力は大歓迎です。

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 に答える