Java學習之佈局管理器

   佈局就是各個組件在窗口中的位置,或爲相對位置或爲絕對位置。在界面編程中是必要的。

1、簡介

    把 Swing 的各種組件(JComponent)添加到面板容器中(JPanel),需要給面板容器指定佈局管理器(LayoutManager),明確容器(Container)內的各個組件之間的排列布局方式。

2、箱式佈局

     由BoxLayout類實現的佈局管理器稱爲箱式佈局管理器,用來管理一組水平或垂直排列的組件,如果是用來管理一組水平排列的組件,則稱爲水平箱,效果如左圖所示,如果是用來管理一組垂直排列的組件,則稱爲垂直箱,效果如右圖所示

Swing 提供了一個實現了 BoxLayout 的容器組件Box。使用 Box 提供的靜態方法,可快速創建水平/垂直箱容器(Box),以及填充組件之間空隙的不可見組件。

// 創建一個水平箱容器
Box hBox = Box.createHorizontalBox();
    
// 創建一個垂直箱容器
Box vBox = Box.createVerticalBox();

Box 內的組件之間默認沒有空隙並居中,如果想在組件之間(或頭部/尾部)添加空隙,可以在其中添加一個影響佈局的不可見組件。

topicBox.add(Box.createHorizontalStrut(5));// 添加一個5像素寬的水平支柱 

box.add(Box.createVerticalStrut(5));// 添加一個5像素高的垂直支柱

contentBox.setAlignmentX(1);// 設置組件的水平調整值,靠右側對齊

contentLabel.setAlignmentY(0);// 設置組件的垂直調整值,靠上方對齊

例如將一根按鈕添加到箱式容器裏面:

        JButton submitButton = new JButton("確定");// 創建一個按鈕
        submitButton.setAlignmentX(1);// 設置組件的水平調整值,靠右側對齊
        box.add(submitButton);// 添加到垂直箱容器中

3、卡片佈局管理器

CardLayout類實現的佈局管理器稱爲卡片佈局管理器,用來操縱其所管理容器中包含的容器或組件。每個直接添加到其所管理容器中的容器或組件爲一個卡片,最先被添加到其所管理容器中的容器或組件被認爲是第一個卡片,最後被添加的則爲最後一個卡片,初次運行時將顯示第一個卡片。

創建一個卡片佈局管理器:

        cardLayout = new CardLayout();// 創建一個卡片佈局管理器對象
        cardPanel = new JPanel(cardLayout);// 創建一個採用片佈局管理器的面板對象
        getContentPane().add(cardPanel, BorderLayout.CENTER);// 添加到窗體中間

卡片中添加組件

 JButton btn01 = new JButton("Button01");

  panel.add(btn01, "btn01"); //btn01爲一個組件,"btn01"爲卡片的名字

 

常用的方法:

// 顯示第一張卡片 void first(Container parent);

// 顯示最後一張卡片 void last(Container parent);

// 顯示下一張卡片(自動循環顯示) void next(Container parent);

// 顯示上一張卡片(自動循環顯示) void previous(Container parent);

// 顯示指定名稱的組件(添加組件到容器時,可同時添加組件的名稱) void show(Container parent, String name);

4、網格組佈局管理器

GridBagLayout類實現的佈局管理器稱爲網格組佈局管理器,它實現了一個動態的矩形網格,這個矩形網格由無數個矩形單元格組成,每個組件可以佔用一個或多個這樣的單元格。所謂動態的矩形網格,就是可以根據實際需要隨意增減矩形網格的行數和列數。

設置爲網格佈局

        getContentPane().setLayout(new GridBagLayout());

添加一個組件到一個網格里面,這裏例如一個按鈕

        final JButton button = new JButton("A");
        final GridBagConstraints gridBagConstraints = new GridBagConstraints(); //佈局管理器
        gridBagConstraints.gridy = 0;// 起始點爲第1行
        gridBagConstraints.gridx = 0;// 起始點爲第1列
        gridBagConstraints.weightx = 10;// 第一列的分佈方式爲10%
        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;//組件 在其 顯示區域內 的填充方式
        getContentPane().add(button, gridBagConstraints);

5、彈簧佈局管理器

     彈簧佈局管理器以容器和組件的邊緣爲操縱對象,通過爲組件和容器邊緣以及組件和組件邊緣建立約束,實現對組件佈局的管理,如下圖所示


 

        // 創建彈簧佈局管理器對象
        SpringLayout springLayout = new SpringLayout();
        Container contentPane = getContentPane();// 獲得窗體容器對象
        // 將窗體容器修改爲採用彈簧佈局管理器
        contentPane.setLayout(springLayout);

設置彈簧的距離

        JLabel topicLabel = new JLabel("主題:");
        contentPane.add(topicLabel);
        // 主題標籤北側——>容器北側
        springLayout.putConstraint(NORTH, topicLabel, 15, NORTH, contentPane);
        // 主題標籤西側——>容器西側
        springLayout.putConstraint(WEST, topicLabel, 5, WEST, contentPane); 

支柱和彈簧:

        Spring vST = Spring.constant(20);// 創建一個支柱
        Spring hSP = Spring.constant(20, 100, 500);// 創建一個彈簧
        
        JButton lButton = new JButton("按鈕L");
        getContentPane().add(lButton);
        springLayout.putConstraint(NORTH, lButton, vST, NORTH,getContentPane());// “按鈕L”北側——>容器北側
        springLayout.putConstraint(WEST, lButton, hSP, WEST,getContentPane());// “按鈕L”西側——>容器西側

利用彈簧控制組件大小:

        JButton lButton = new JButton("按鈕L");
        getContentPane().add(lButton);

        Spring widthSP = Spring.constant(60, 300, 600);// 創建一個彈簧
        Spring heightST = Spring.constant(60);// 創建一個支柱
        // 獲得“按鈕L”的Constraints對象
        Constraints lButtonCons = springLayout.getConstraints(lButton);
        lButtonCons.setWidth(widthSP);// 設置控制組件寬度的彈簧
        lButtonCons.setHeight(heightST);// 設置控制組件高度的支柱

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章