【问题标题】:How to fix size error of Java Swing JFrame如何修复 Java Swing JFrame 的大小错误
【发布时间】:2021-03-08 22:53:49
【问题描述】:

我正在练习 Swing 布局。 我求JFrame的实际大小与size Dimension不匹配

import java.awt.*;

import javax.swing.*;

public class GridRanFruit {
    public GridRanFruit() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(600, 600));
        frame.setLayout(null);

        JPanel primary = new JPanel();
        primary.setBounds(new Rectangle(0, 0, 600, 600));
        primary.setLayout(new GridLayout(4, 4));

        JPanel panels[][] = new JPanel[4][4];

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JPanel panel = new JPanel();
                panel.setBackground(Color.gray);
                primary.add(panel);
                panels[i][j] = panel;
            }
        }

        int ranSeed = (int) (Math.random() * 16);
        panels[ranSeed/4][ranSeed%4].setBackground(Color.green);

        frame.getContentPane().add(primary);
        frame.pack();
        frame.setVisible(true);

    }
}

您可以从下面的图片中找到小错误。怎么解决呢? 我正在使用setPerferredSize 方法。 这意味着JFrame 的大小与JPanel 不匹配,尽管大小相同

error height

error width

nomal size

【问题讨论】:

  • 设置 JFrame 的 contentPane 的首选大小,而不是 JFrame 本身。
  • 避免使用null 布局,这些只会给您带来问题。请记住,窗户装饰包含在窗户的边界内,因此您的可用空间将是窗户边界减去窗户装饰插图。

标签: java swing jframe components jpanel


【解决方案1】:

尝试将设置大小的行替换为

frame.setSize(600,600);

setPreferredSize(),就像其中一位评论者所说,是用于内容窗格(框架内可以放置东西的空间)而不是框架本身(窗口的边框)。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多