所以我将 JFrame 设置为全尺寸
temp.setExtendedState(JFrame.MAXIMIZED_BOTH);
我添加了 3 个面板(边框布局),在 panel1 中我使用 JLabel 来显示图像:
img.getScaledInstance(600, 400,
Image.SCALE_SMOOTH);
panel2一样,panel3只是一些按钮。 (我不会在这里发布整个代码),但是这段代码运行得很好。 现在我想做的是: Jframe是全尺寸的,45%被panel1占据,45%被panel2占据,10%被panel3占据。 如果我的图片到 dsiplay 太大而无法容纳 45%,则它会缩放以适合 JFrame 的 45%(如果它比刚刚显示的小)。有任何想法吗 ?
最佳答案
您可以使用 Darryl 的 Shrink Icon 。这是一个图标
,您可以将其添加到JLabel
,然后将JLabel
添加到您的JPanel
。
收缩图标
的工作原理是:
- 如果没有足够的空间来显示图像,则会缩小图像
- 如果有足够的空间,则图像将在可用空间中居中。
我们不会对组件的空间分配进行硬编码。我们让每个组件占据它所需的空间。因此,对于您的主要布局,您将使用框架的 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)
现在,图像面板将随着框架尺寸的变化而增大/缩小,并且标签也会根据可用空间而增大/缩小。
关于JAVA布局情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947805/