1

所以我试图创建一个tictactoe板,但它没有出现任何东西。(有一个主类,但它只是创建一个“GameBoard”)

任何帮助将不胜感激,在此先感谢您。

所以我添加了组件,不敢相信我忘记了,我一定是累了。

但是现在我得到的只是一个红色方块。

    public GameBoard() 
    {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(0, 0, 195, 215);
        frame.setSize(new Dimension (300, 400));
        int count = 1;
        Rectangle board[][] = new Rectangle[3][3];


        for (int row = 0; row < board.length; row++){
            for (int col = 0; col < board[row].length; col++){
                if (count == 2){

                board[row][col] = new Rectangle(1,1,1,1);
               board[row][col].setBackground(Color.RED);
               frame.add(board[row][col]);
               count--;
            } else {board[row][col] = new Rectangle(1,1,1,1);
                    board[row][col].setBackground(Color.BLACK);
                    frame.add(board[row][col]);
                    count++;
                }
            }}
        frame.pack();
        frame.setVisible(true);
}}

矩形类:

public class Rectangle extends JComponent  {


    public Rectangle(int x, int y, int w, int h)  {
        super();
        setBounds(x, y, w, h);
        setBackground(Color.black);
    }


    public void paint(Graphics g)  {
        g.setColor( getBackground() );
        g.fillRect(0, 0, getWidth()-1, getHeight()-1);
        paintChildren(g);
   }

}

4

2 回答 2

1

从逻辑上讲,您缺少将板实际添加到 JFrame 的步骤:

frame.add(...);

在您的 for 循环中,因此您正在创建 JFrame 和 Rectangles,但从不将矩形添加到您的 JFrame 中。

正如@AmitD 指出的那样, JFrame.add() 不接受矩形,因此您需要编写一个扩展 JComponent 的类以在其paintComponent()方法中绘制矩形。

解决显示问题(只看到红色):

您需要为您的JFrame;设置一个布局管理器。我认为GridLayout最适合您的情况:

...
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(3,3));
...
于 2012-11-01T19:50:01.977 回答
0

您创建了一个空的 JFrame,并创建了一堆存储到数组中的矩形,但您从不绘制任何地方,因此框架保持为空。

您需要在 JComponent 上绘制这些矩形(通过覆盖其paintComponent()方法),然后将此 JComponent 添加到框架中。

编辑:正如@whiskeyspider 所指出的,标准 Rectangle 类中没有 setBackground() 方法。因此,如果 Rectangle 是您的一个类,并且是 JComponent 的子类,您需要将 Rectangle 的实例添加到框架中。

于 2012-11-01T19:50:23.753 回答