【问题标题】:JAVA Layout situationJAVA布局情况
【发布时间】:2015-11-26 22:23:37
【问题描述】:

所以我将 JFrame 设置为全尺寸

temp.setExtendedState(JFrame.MAXIMIZED_BOTH); 

我添加了 3 个面板(borderlayout),在 panel1 我有 JLabel 来显示图像:

img.getScaledInstance(600, 400,
        Image.SCALE_SMOOTH);

panel2 一样,panel3 只是一些按钮。 (我不会在这里发布整个代码),但是这段代码运行得很好。 现在我想做的是: Jframe是全尺寸的,45%被panel1占据,45%被panel2占据,10%被panel3占据。 如果我的 dsiplay 图片太大而无法容纳 45%,它会被缩放以适合这 45% 的 JFrame,如果它比刚刚显示的要小。有任何想法吗 ?

【问题讨论】:

  • 你的意思是当容器的大小发生变化时你希望图像调整大小?
  • 也许 thisthis 可能会有所帮助
  • 嗨,我会检查一下,但只是为了解释一下:首先我想将全尺寸的 JFrame 分为:45%、45%、10%,所以你会看到 1 张图片,在它下面是另一张图片,按钮上有一些按钮(10%)。如果图片太大而无法容纳 45%,则它会被缩放,如果没问题,那么它就会显示出来
  • 或者我可以这样说:容器 Jpanel1 的大小总是 Jframe 的 45%,Jpanel 2 也是。 Jframe 始终是全尺寸的。现在我想让图片适合那 45%。就像这样:我想同时显示 2 张图片,尽可能大,下面有一些控件(按钮),就是这样

标签: java swing


【解决方案1】:

您可以使用 Darryl 的 Shrink Icon。这是一个Icon,您可以将其添加到JLabel,然后将JLabel 添加到您的JPanel

Shrink Icon 的工作原理是:

  1. 如果没有足够的空间来显示图像,则会缩小图像
  2. 如果有足够的空间,则图像将位于可用空间的中心。

我们不对组件的空间分配进行硬编码。我们让每个组件占据它需要的空间。因此,对于您的主布局,您将使用框架的 BorderLayout。

你会使用的:

JPanel controls = new JPanel();
controls.add(...);
frame.add(controls, BorderLayout.PAGE_END);

然后您将为您的图像创建第二个面板:

JPanel images = new JPanel( new GridLayout(0, 1) );
images.add( new JLabel(...) );
images.add( new JLabel(...) );
frame.add(images, BorderLayout.CENTER)

现在图像面板会随着框架大小的变化而增大/缩小,并且标签也会根据可用空间而增大/缩小。

【讨论】:

  • "如果需要,图像将被缩小以适应组件的边界;"好的,所以这可以工作,但是如何使组件 Jpanel1 占用全尺寸 Jframe 的 45% ???
  • 好吧,我认为这是可行的,明天我会检查并告诉你,谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2014-09-20
  • 2011-12-29
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多