【问题标题】:Getting JFrame to contain JPanel让 JFrame 包含 JPanel
【发布时间】:2011-10-05 01:17:49
【问题描述】:

我有一个 JFrame,我将一个 JPanel 插入其中以显示图像,在本例中为 1024x1025。我似乎找不到答案的问题是如何确保我包含的 JFrame 将显示整个图像/JPanel。我有一些接近这个例子的东西:

ImagePanel view = new ImagePanel(); //extends JPanel
JFrame Container = new JFrame();
view.setSize(1024, 1025);
container = new JFrame(winTitle);
container.setLayout(new BorderLayout());
container.setSize(view.getSize());
container.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
container.add(view);
container.setVisible(true);

这个问题显然是 JFrame 是由底层操作系统修饰的,所以我不知道有多少像素使它大于系统之间的 JPanel 的大小。就像现在一样,由于将 JFrame 设置为与 JPanel 相同的大小,图像在右侧和底部被截断了几个像素。有没有办法告诉 JFrame 读取它所包含的 Jpanel 的大小并使其自身足够大以显示整个 JPanel?谢谢!

编辑

在图像面板上设置首选大小,然后在容器上设置大小(不是首选),然后在添加后打包给我想要的行为。谁能解释一下这里发生了什么,我对一些摆动组件的操作顺序还是有点模糊。

【问题讨论】:

  • "JPanel into to display an image" 您是否在图像上添加了其他内容?如果没有,请将其放入(ImageIconJLabel

标签: swing user-interface jframe jpanel


【解决方案1】:

您应该将图像面板添加到 JFrame 的 contentPane。您应该在框架上使用pack() 以使其具有适当的大小。它将采用适应其组件的首选大小所需的大小。

【讨论】:

  • 这使得窗户很小。此时 JPanel 的画布上没有绘制图像。
  • 您需要设置封闭 JPanel 的首选大小,因为 pack 会根据首选大小和组件的布局计算框架的大小。
  • 好的,我认为实际的问题可能是我的 Eclipse。但这可行,如果我设置图像面板的首选大小,然后在容器上设置 setSize(),然后 pac()k 就可以了。如果我在两者上都设置了首选,它会由于某种原因使框架变小。
【解决方案2】:

container.add() 之后和container.setVisible() 之前,添加一个container.pack()

编辑:您还可以在 BorderLayout 的一侧使用 Box.createVerticalStrut(int)Box.createHorizontalStrut(int)。这应该会强制布局为图像留出空间。

【讨论】:

  • 这使得所有的窗口都很小,一旦我填充图像,它们就不会调整大小。
  • 然后在填充完图片后再次调用pack()
  • 在填充图像之前,我需要窗口 (JFrame) 的大小正确。
【解决方案3】:

如果您确定图像分辨率,则将setPreferredSize(new Dimension(1024, 1025)) 用于 JFrame 和 JPanel。由于JFrame默认使用BorderLayout,所以不需要指定container.setLayout(new BorderLayout());

【讨论】:

  • 不幸的是,由于某种原因,这样做会使 JFrame 变得很小。我认为这与 pack();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多