Java 将项目放置到具有gridlayout的面板中

Java 将项目放置到具有gridlayout的面板中,java,graphics,jframe,grid-layout,Java,Graphics,Jframe,Grid Layout,大家好,我正试图用GUI在Java中绘制一个棋盘。我已经为游戏板的方块创建了一个方块类 方形类: import javax.swing.*; import java.awt.*; public class Square extends JPanel { private int width = 80; private int height = 80; private int x,y; private Color color; public Square(int x, int y, Color

大家好,我正试图用GUI在Java中绘制一个棋盘。我已经为游戏板的方块创建了一个方块类

方形类:

import javax.swing.*;
import java.awt.*;

public class Square extends JPanel {

private int width = 80;
private int height = 80;
private int x,y;
private Color color;

public Square(int x, int y, Color color) {
    this.x = x;
    this.y = y;
    this.color = color;
}

public void paint(Graphics graphics){
    //setSize(new Dimension(width,height));
    graphics.setColor(color);
    graphics.drawRect(x,y, width,height);
    graphics.fillRect(x,y,width,height);
}
}
基本上,我想创建一个网格布局为8乘8的面板。然后添加方形对象网格布局面板。我希望第一行包含红色,黑色,红色,黑色,红色,黑色,红色,黑色方块,第二行包含黑色,红色,黑色,红色,黑色,红色,黑色,黑色,红色方块

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setPreferredSize(new Dimension(600,600));

    JPanel panel = new JPanel(new GridLayout(8,8));
    panel.setLayout(new GridLayout(8, 8));
    panel.setBackground(Color.green);

    Square redsqr1 = new Square(0,0, Color.RED);
    Square blksqr1 = new Square(0,0, Color.BLACK);
    Square redsqr2 = new Square(0,0, Color.RED);
    Square blksqr2 = new Square(0,0, Color.BLACK);
    Square redsqr3 = new Square(0,0, Color.RED);
    Square blksqr3 = new Square(0,0, Color.BLACK);
    Square redsqr4 = new Square(0,0, Color.RED);
    Square blksqr4 = new Square(0,0, Color.BLACK);

    Square redsqr5 = new Square(0,0, Color.RED);
    Square blksqr5 = new Square(0,0, Color.BLACK);
    Square redsqr6 = new Square(0,0, Color.RED);
    Square blksqr6 = new Square(0,0, Color.BLACK);
    Square redsqr7 = new Square(0,0, Color.RED);
    Square blksqr7 = new Square(0,0, Color.BLACK);
    Square redsqr8 = new Square(0,0, Color.RED);
    Square blksqr8 = new Square(0,0, Color.BLACK);

    panel.add(redsqr1);
    panel.add(blksqr1);
    panel.add(redsqr2);
    panel.add(blksqr2);
    panel.add(redsqr3);
    panel.add(blksqr3);
    panel.add(redsqr4);
    panel.add(blksqr4);
    panel.add(blksqr5);
    panel.add(redsqr5);
    panel.add(blksqr6);
    panel.add(redsqr6);
    panel.add(blksqr7);
    panel.add(redsqr7);
    panel.add(blksqr8);
    panel.add(redsqr8);

    frame.getContentPane().add(panel);


    frame.pack();
    frame.setVisible(true);

}
当我运行程序时,我得到了输出

只是好奇为什么输出被放置在两列中,每个正方形之间有很大的空间。我如何让他们并排站在一排,第一排包含红色,黑色,红色,黑色,红色,黑色,红色,黑色方块,第二排包含黑色,红色,黑色,红色,黑色方块

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setPreferredSize(new Dimension(600,600));

    JPanel panel = new JPanel(new GridLayout(8,8));
    panel.setLayout(new GridLayout(8, 8));
    panel.setBackground(Color.green);

    Square redsqr1 = new Square(0,0, Color.RED);
    Square blksqr1 = new Square(0,0, Color.BLACK);
    Square redsqr2 = new Square(0,0, Color.RED);
    Square blksqr2 = new Square(0,0, Color.BLACK);
    Square redsqr3 = new Square(0,0, Color.RED);
    Square blksqr3 = new Square(0,0, Color.BLACK);
    Square redsqr4 = new Square(0,0, Color.RED);
    Square blksqr4 = new Square(0,0, Color.BLACK);

    Square redsqr5 = new Square(0,0, Color.RED);
    Square blksqr5 = new Square(0,0, Color.BLACK);
    Square redsqr6 = new Square(0,0, Color.RED);
    Square blksqr6 = new Square(0,0, Color.BLACK);
    Square redsqr7 = new Square(0,0, Color.RED);
    Square blksqr7 = new Square(0,0, Color.BLACK);
    Square redsqr8 = new Square(0,0, Color.RED);
    Square blksqr8 = new Square(0,0, Color.BLACK);

    panel.add(redsqr1);
    panel.add(blksqr1);
    panel.add(redsqr2);
    panel.add(blksqr2);
    panel.add(redsqr3);
    panel.add(blksqr3);
    panel.add(redsqr4);
    panel.add(blksqr4);
    panel.add(blksqr5);
    panel.add(redsqr5);
    panel.add(blksqr6);
    panel.add(redsqr6);
    panel.add(blksqr7);
    panel.add(redsqr7);
    panel.add(blksqr8);
    panel.add(redsqr8);

    frame.getContentPane().add(panel);


    frame.pack();
    frame.setVisible(true);

}

提前感谢您的帮助

这是因为您没有将所有需要的64个正方形添加到布局中。因此布局单元将被拉伸以填充所有空间。因此,输出将是混乱的。此外,最好将水平和垂直间隙设置为
0
。另一个提示是通过调用
JFrame#add
它将组件添加到contentPane,而无需让contentPane向
JFrame
添加内容。此外,在基础
JFrame
Square
之间不需要中介
JPanel

此外,我还稍微更改了主方法,以减少创建和向输出帧添加
Square
s的难度:

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setPreferredSize(new Dimension(600,600));
    frame.setLayout(new GridLayout(8, 8, 0, 0));
    frame.getContentPane().setBackground(Color.green);

    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            frame.add(new Square(0, 0, (i+j)%2==0 ? Color.RED : Color.BLACK));
        }
    }   

    frame.pack();
    frame.setVisible(true);
}
publicstaticvoidmain(字符串[]args){
JFrame=新JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE\u ON\u CLOSE);
框架。设置首选尺寸(新尺寸(600600));
frame.setLayout(新的GridLayout(8,8,0,0));
frame.getContentPane().setBackground(颜色为.green);
对于(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
frame.add(新的正方形(0,0,(i+j)%2==0?Color.RED:Color.BLACK));
}
}   
frame.pack();
frame.setVisible(true);
}

希望这会有所帮助。

非常感谢您的回复。对不起,我迟了答复。在我收到您的帮助的那天,它工作得非常好。然后,当我在将近一周后查看它时,我尝试将sqaures实现为jLayeredPane,结果我把它搞砸了,sqaures不再形成棋盘格。只画了一个广场,不客气。很高兴这有帮助。在StackOverFlow中,通常当某个答案对您有帮助时,您可以勾选该答案左侧的绿色复选标记,将其标记为您的问题的答案。此外,对于
JLayeredPane
来说,它可以是另一个带有a的问题,可以更快更好地获得帮助。