[英]Packed JFrame Too Tall?
我正在尝试创建一个简单的Java Swing GUI,该GUI由顶部的面板和中心的标签组成。 我希望顶部面板保持其首选大小,并且选项卡占用剩余空间,因此我使用BorderLayout
。 选项卡的内容可能很高,因此我将选项卡组件放入滚动窗格中。
一切似乎都按我期望的方式工作(关于调整框架大小时的组件大小和滚动条行为),除了打包的框架太高12像素(可能太宽16像素)。 有人请解释发生了什么事以及如何解决它。 当包装确定所有组件的大小时,某种程度上,某种东西足够聪明,足以(主要)尊重屏幕尺寸。 我在Windows 7上使用Java 8,屏幕分辨率为1920 x 1200。
以下是我的测试代码及其产生的输出。
码:
package test;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public final class SizeTest
{
public static void main(final String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGui();
}
});
}
private static void createAndShowGui()
{
final JPanel topPanel = new JPanel();
topPanel.setBorder(BorderFactory.createTitledBorder("Top"));
topPanel.setPreferredSize(new Dimension(800, 150));
final JPanel centerPanel = new JPanel();
centerPanel.setBorder(BorderFactory.createTitledBorder("Center"));
centerPanel.setPreferredSize(new Dimension(800, 1300));
final JScrollPane scrollPane = new JScrollPane(centerPanel);
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Tab", scrollPane);
final JPanel mainPanel = new JPanel(new BorderLayout(0, 10));
mainPanel.add(topPanel, BorderLayout.NORTH);
mainPanel.add(tabbedPane, BorderLayout.CENTER);
final JFrame mainFrame = new JFrame("Size Test");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.add(mainPanel);
mainFrame.pack();
System.err.println("***** Frame Size: " + mainFrame.getSize() + ", Screen Size: "
+ Toolkit.getDefaultToolkit().getScreenSize() + ", Maximum Window Bounds: "
+ GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds());
mainFrame.setVisible(true);
}
}
输出:
***** Frame Size: java.awt.Dimension[width=816,height=1212], Screen Size: java.awt.Dimension[width=1920,height=1200], Maximum Window Bounds: java.awt.Rectangle[x=0,y=0,width=1920,height=1156]
如果您打算使用setPreferredSize
来解决问题,请为误入歧途做好准备。
我要做的第一件事是认真考虑使用setPreferredSize
。
由于API的工作方式, JScrollPane
将使用组件的preferredSize
来确定其自身的大小。 您可以通过实现Scrollable
接口来更改此设置,该接口允许您返回preferredScrollableViewportSize
, JScrollPane
在确定需要多大时将使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.