为什么 swing gui 表现得很奇怪?

Why is the swing gui behaving strange?

我刚开始在扫雷上制作 Java 应用程序。这个想法是 JFrame 内的 GridLayout JPanel。但是在执行程序后我得到一些奇怪的 window。左上角有个奇怪的灰色角。而且瓷砖并没有全部显示出来。不知何故将鼠标悬停在它们上面显示。

JFrame frame = new JFrame("MineSweeper");
        JPanel panel = new JPanel();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(600, 540));
        frame.add(panel);
        panel.setPreferredSize(new Dimension(540, 540));
        panel.setLayout(new GridLayout(numRows, numCols));
        
        for(int y=0; y<numRows; y++) {
            for(int x=0; x<numCols; x++) {
                Tile t = new Tile(x, y);        
                panel.add(t);
                field[y][x] = t;
                
            }
        }
        
        frame.pack();
        panel.setVisible(true);
        frame.setVisible(true);

这个程序产生了这个丑陋的可憎之物。

如何让网格一次全部显示出来?以及如何去除左上角的那个灰点。

注意:我刚开始使用 Swing GUI,所以几乎一无所知。尽量不要弄得太复杂。

我尝试重写了这个布局代码,一点也不复杂:)

public class MineSweeper extends JFrame {

    public static void main(String[] args) {
        int columns = 10, rows = 10;
        int cellSize = 50;

        JPanel board = new JPanel();
        board.setLayout(new GridLayout(rows, columns));
        for (int i = 0; i < columns; i++) {
            for (int j = 0; j < rows; j++) {
                board.add(new Button("x"));
            }
        }

        MineSweeper mineSweeper = new MineSweeper();
        mineSweeper.setDefaultCloseOperation(EXIT_ON_CLOSE);
        mineSweeper.setContentPane(board);
        mineSweeper.setSize(cellSize * columns, cellSize * rows);
        mineSweeper.setResizable(false);
        mineSweeper.setVisible(true);
    }
}

所以我认为您的问题可能是关于 setPreferredSize() 电话,或者您的 Tile class。