如何在java swing中自动扩展帧的高度

时间:2012-08-06 06:26:02

标签: java swing jframe

我创建了500,500大小的小框架,在我的框架中我添加了面板,我已经动态添加了标签和文本框,我在我的面板中添加了10个标签它正确显示但我将添加另外5个标签和文本框继续上面添加的标签意味着在5个标签和文本框之后隐藏,所以如何 我自动延伸框架高度

3 个答案:

答案 0 :(得分:3)

调用.pack()方法应该可以解决问题:

  

public void pack()

     

使此窗口的大小适合首选大小和布局   其子组件。窗口的最终宽度和高度是   如果任何一个尺寸小于,则自动放大   上一次调用setMinimumSize指定的最小大小   方法。如果窗口和/或其所有者尚未显示,则两者都可以显示   在计算首选尺寸之前,它们是可显示的。   窗口在计算其大小后进行验证。

答案 1 :(得分:2)

有一些重要的规则和必要的知识,具体的LayoutManager如何使用min,max和PreferredSize来自它的孩子

  1. 我强烈建议您添加(re)validate()repaint()已经可见Container

  2. 使用JScrollPane作为JComponent / JFrame / JDialog添加的第一个JWindow,并确定{{1}的最大尺寸(最好可能来自显示分辨率),在超出最大大小的情况下不要使用JFrame,否则容器边界可能会超出屏幕

  3. 代码示例,必须在第2点添加规则。

    pack()

答案 2 :(得分:0)

没有布尔值可以设置为true以使帧自动增长。

每次添加内容时,您可能希望执行内容面板getPreferredSize(),并frame.setSize(...)以适应新组件。

这是一个演示

public class FrameTestBase {

    public static void main(String args[]) {
        final JFrame t = new JFrame();

        t.getContentPane().setLayout(new GridLayout(-1, 1));

        t.add(new JButton(new AbstractAction("Add label") {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                t.getContentPane().add(new JLabel("hello"));

                // Auto-adjust height.
                Dimension dim = t.getContentPane().getPreferredSize();
                dim.width = 500;
                t.setSize(dim);
            }
        }));

        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.setSize(500, 500);
        t.setVisible(true);
    }
}