3

我的应用程序/JFrame 使用 Borderlayout,顶部或北部有一个工具栏,底部或南部有一个状态栏,中间有一个 JPanel.JTabbedPane.JScrollPane.JTable。JPanel 始终是一个固定大小,可以使用以各种组合应用于各种组件的各种 set*Size() 方法进行粗略调整。但它总是一个固定的大小,总是有东西的差距。南北组件保持固定高度并按预期水平调整大小。

当然,这不是一个新的或独特的设计。

这是正常行为吗?有什么我错过的技巧吗?

4

1 回答 1

3

这是保留默认值FlowLayout并将JPanel面板添加到BorderLayout. 下面的示例比较了具有FlowLayout、默认值或 的面板GridLayout。相比之下,将两者添加到 aGridLayout中,这允许以类似于BorderLayoutcenter 的方式进行扩展。

布局比较图

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;

/** @see http://stackoverflow.com/questions/5822810 */
public class LayoutPanel extends JPanel {

    public LayoutPanel(boolean useGrid) {
        if (useGrid) {
            this.setLayout(new GridLayout());
        } // else default FlowLayout
        this.add(new JTree());
    }

    private static void display() {
        JFrame f = new JFrame("LayoutPanels");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 0));
        f.add(new LayoutPanel(false));
        f.add(new LayoutPanel(true));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
于 2011-04-28T20:06:03.363 回答