首页 > 解决方案 > Java swing Frame高度太大

问题描述

我的应用程序的主框架有很多垂直的内容,所以我把它放在一个 ScrollPane 中。如果屏幕内容太多,无法容纳,则 ScrollPane 会做它的事情,我可以滚动。
但是,框架高度总是比屏幕高度大 20 像素,这真的很烦人。

MWE:

import java.awt.Toolkit;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

public class tests
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS) );
        
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS) );
        
        for (int i = 0; i < 100; i ++)
            panel.add(new JLabel("Label") );
        
        JScrollPane scroll_pane = new JScrollPane(panel,
            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        
        frame.add(scroll_pane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
        System.out.println(Toolkit.getDefaultToolkit().getScreenSize().getHeight() );
        System.out.println(frame.getHeight() );
    }
}

对我来说,输出是

1080.0
1100

我怎样才能解决这个问题?

编辑:我已经尝试过了frame.setExtendedState(JFrame.MAXIMIZED_VERT);,但这并没有改变任何东西。frame.setExtendedState(JFrame.MAXIMIZED_BOTH);确实有效,但我不希望窗口跨越整个宽度!

标签: javaswingjframe

解决方案


推荐阅读