Java圖形用戶界面佈局控制Layout練習

嘗試搭建登錄對話框,包含兩個文字標籤(用戶名、服務器IP),兩個文本輸入條(用戶名、服務器IP),一個按鈕(登錄),按照自己認爲合適的方式佈局。 
  我把GridLayout(網格佈局)、BorderLayout(邊界佈局)、FlowLayout(流式佈局)三種佈局進行了比較並且做了嘗試。 
  終於到了使用Java得到圖形反饋的結果,心裏還有些小激動呢。雖然只是完成了界面的展示,沒有功能的實現,但是成就感還是蠻大的,而且查詢JDK文檔真的非常有收穫。

package gui;
import java.awt.*;
import javax.swing.*;
public class Dialog {

    public static void main(String[] args) {
        JDialog dialog=new JDialog();
        dialog.setTitle("登錄");

        TextField text1 = new TextField(10);
        TextField text2 = new TextField(15);

        JLabel label1 = new JLabel("暱稱");
        JLabel label2 = new JLabel("服務器");

        JButton button1 = new JButton("登錄");

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

        GridLayout gl = new GridLayout(3, 1);

        dialog.setLayout(gl);

        panel1.add(label1);
        panel1.add(text1);
        panel2.add(label2);
        panel2.add(text2);
        panel3.add(button1);

        dialog.add(panel1);
        dialog.add(panel2);
        dialog.add(panel3);

        dialog.setSize(300, 200);
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);

    }

}

  這個是我們製作的聊天軟件的登錄界面部分,在gui包下,這一部分用來顯示圖形界面。首先,導入對應的Java包,把人家“寫”好的容器、組件拿來使用。 
  實際上圖形界面的設計說白了也是類的關係,這也就是Java是面向對象的原因。Swing類對AWT類進行了擴展。佈局管理器分爲容器類和組件類,我們需要做的就是在容器中添加不同組件,完成佈局。 
  新建一個Dialog類,在主方法中,用JDialog類來創造一個Dialog的對象,這樣實際上就創建了一個對話框,這樣之後,只需要往其中加入相應的組件就好了。設置對話框的大小,用setSize方法設置長爲300px,寬爲200px。 
  對話框有了,然後用JDialog類添加三個容器。 
  創造兩個標籤,label取名爲“用戶名”,label2取名爲“IP”,創造兩個輸入條,test1、test2根據需求最大容量爲10、15。最後創造一個按鈕,button1按鈕對應的名稱“登錄”。 
  把相應的組件放到指定的容器中。 
  既然GridLayout是一個類,那麼就找到Gridlayout()構造方法,然後構造一個三行一列的佈局對象g1。佈局也是對象,很奇妙有木有。接着找到了對應的setLayout方法,然後設置佈局。 
  根據順序的不同,把一個個容器用add方法添加到對話框中。 
  對話框設置後,希望展現的位置在屏幕居中,setter方法設置爲null。 
  目前界面佈置好了,可是框架還不能顯示,於是把可見性的setVisible法設爲真值,如假包換的聊天工具界面就展現出來了。 
  還有一種佈局格式主要使用的邊界佈局。

package gui;
import java.awt.*;
import javax.swing.*;
public class LoginDialogDemo {

    public static void main(String[] args) {
        JDialog loginDialog=new JDialog();
        loginDialog.setTitle("登錄");

        JLabel usernameLabel=new JLabel("暱稱");
        JLabel ipLabel=new JLabel("服務器");

        JTextField usernameField=new JTextField(10);
        JTextField ipField=new JTextField(10);

        JButton loginButton=new JButton("登錄");

        JPanel centerPanel=new JPanel(new GridLayout(2, 1));

        JPanel upPanel=new JPanel(new FlowLayout());
        upPanel.add(usernameLabel);
        upPanel.add(usernameField);

        JPanel downPanel=new JPanel();//JPanel默認用流式佈局FlowLayout
        downPanel.add(ipLabel);
        downPanel.add(ipField);

        centerPanel.add(upPanel);
        centerPanel.add(downPanel);

        loginDialog.add(centerPanel,BorderLayout.CENTER);

        JPanel southPanel =new JPanel();
        southPanel.add(loginButton);

        loginDialog.add(southPanel, BorderLayout.SOUTH);

        loginDialog.setSize(300, 200);
        loginDialog.setLocationRelativeTo(null);
        loginDialog.setVisible(true);

    }

}

  組件上大同小異,佈局上需要CETER和SOUTH部分,CETER部分中建立一個centerPanel容器嵌套一個2行一列的網格佈局,網格佈局中加入兩個容器,upPanel和downPanel兩部分,第一行upPanel使用流式佈局,添加相應的標籤和文本輸入條,第二行downPanel沒有表示出來,但是使用了默認的流式佈局,同樣加入組件。 
  centerPanel在邊框佈局中默認放置於中部,所以不設置後面的屬性BorderLayout.CENTER作用是一樣的。因爲只設置了中部區域和南部區域,所以中部會把未使用的區域佔滿,西、北、東區域將被中部佔據位置。 
  南部區域加入southPanel組件,然後加入loginButton按鈕,大功告成。 
  兩種方式都完成了同樣的效果,但是在實踐中卻有了不同的收穫。我熟悉了FlowLayout、GridLayout、BorderLayout三種佈局樣式,就像原來學習《HTML5CSS3基礎教程》的時候學會了佈局的搭配,掌握了有效率的查詢JDK文檔,更重要的是理解佈局管理器的類關係,對於理解Java面向對象的概念又上升了一個臺階。


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