如何在一个JFrame中设置两个JPanel的大小?

时间:2014-05-31 13:52:54

标签: java

如何修改JFrame中面板的大小

我正在做一个计算器,第一个面板将保存JTextField,我认为它很小 第二个面板将保持JButtons,假设它更大

JFrame frame = new JFrame(new GridLayout(2, 1));

JPanel panel1 = new JPanel();
JPanel panel2 = new JPabel();

frame.add(panel1);
frame.add(panel2);

我一直试图让panel1小于panel2,但没有任何效果!

1 个答案:

答案 0 :(得分:1)

在这种情况下,GridLayout不是一个合适的选择,因为它忽略了容器内组件的首选大小,而是以相同的大小显示它们。

我建议使用BorderLayout。您可以在Oracle教程A Visual Guide to Layout Managers中找到该布局管理器以及其他一些示例和描述。

这是使用BorderLayout的另一个例子,它可能与您的问题更相关。

import java.awt.*;
import javax.swing.*;

public class Test {
    public static void main(String []args){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame();

                JPanel panel1 = new JPanel();
                JPanel panel2 = new JPanel();

                panel1.setBorder(BorderFactory.createTitledBorder("Panel 1"));
                panel2.setBorder(BorderFactory.createTitledBorder("Panel 2"));

                frame.add(panel1, BorderLayout.NORTH);
                frame.add(panel2, BorderLayout.CENTER);

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(new Dimension(200, 200));
                frame.setVisible(true);
            }
        });
    }
}

编辑:默认情况下,JFrame的内容窗格使用BorderLayout,因此没有调用setLayoutSource