JFrame:'随机'尺寸?

时间:2014-04-05 14:07:44

标签: java swing

我创建了一个大小为400x400像素的JFrame。

但是每次运行我的应用程序时,它都有另一个大小(410 x 410),有时它有400 x 400像素。

代码:

panel = new JPanel() {
    private static final long serialVersionUID = -620625052080099140L;

    @Override
    public void paint(Graphics graphics) {
        super.paint(graphics);
        Graphics2D g = (Graphics2D) graphics;
    }
};



panel.setSize(sizeX, sizeY);
panel.setDoubleBuffered(true);


frame= new JFrame("Simulation");

frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.add(panel);
frame.getContentPane().setPreferredSize(new Dimension(sizeX, sizeY));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

2 个答案:

答案 0 :(得分:3)

  

我该怎么称呼? .setSize(...)或.getContentPane()。setPrefferedSize(...)?

你不能调用任何大小的方法。布局管理器的工作是确定大小。 pack()方法将确定适当的大小。

为了使pack()方法起作用,每个组件应该返回一个首选大小。因此,因为您正在进行自定义绘制,所以您需要覆盖类的getPreferredSize()方法,以便为面板返回适当的Dimension。

此外,您应该重写paintComponent()方法而不是paint()方法。

阅读Custom Painting上Swing教程中的部分,了解有关上述建议的更多信息和工作示例。

答案 1 :(得分:2)

自定义绘制的面板应返回合理的首选大小以显示自定义渲染。

打包面板,您会发现它缩小到显示内容所需的最小尺寸,以及框架装饰的大小。正好与展示内容和装饰所需要的一样大。