3

私の app/JFrame は、Borderlayout を使用しており、上部または北にツールバー、下部または南にステータスバー、中央に JPanel.JTabbedPane.JScrollPane.JTable があります。JPanel は常に固定サイズであり、さまざまなコンポーネントにさまざまな組み合わせで適用されるさまざまな set*Size() メソッドを使用して大まかに調整できます。ただし、常に固定サイズであり、常に東と西のギャップがあります。北と南のコンポーネントは固定された高さのままで、期待どおりに水平方向にサイズ変更されます。

確かに、これは新しいデザインでもユニークなデザインでもありません。

これは正常な動作ですか?私が見逃したトリックはありますか?

4

1 に答える 1

3

これは、のデフォルトを保持しFlowLayoutJPanelパネルをの中央に追加することの特徴ですBorderLayoutFlowLayout以下の例では、、デフォルト、または。を持つパネルを比較していますGridLayout。対照的に、2つはaに追加され、中央GridLayoutと同様の方法で拡張できますBorderLayout

レイアウト比較画像

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 に答える