我创建了一个大小为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);
答案 0 :(得分:3)
我该怎么称呼? .setSize(...)或.getContentPane()。setPrefferedSize(...)?
你不能调用任何大小的方法。布局管理器的工作是确定大小。 pack()方法将确定适当的大小。
为了使pack()方法起作用,每个组件应该返回一个首选大小。因此,因为您正在进行自定义绘制,所以您需要覆盖类的getPreferredSize()
方法,以便为面板返回适当的Dimension。
此外,您应该重写paintComponent()
方法而不是paint()方法。
阅读Custom Painting上Swing教程中的部分,了解有关上述建议的更多信息和工作示例。
答案 1 :(得分:2)
自定义绘制的面板应返回合理的首选大小以显示自定义渲染。
打包面板,您会发现它缩小到显示内容所需的最小尺寸,以及框架装饰的大小。正好与展示内容和装饰所需要的一样大。