Java學習筆記之Swing(二)

Java學習筆記之Swing(二)


經過本文你將學習到:html

  • 瞭解各類佈局管理器的樣式
  • 掌握每一種佈局管理器的使用

佈局管理器

在Swing中的佈局管理器有流佈局、網格佈局、邊框佈局、空佈局、卡片佈局等。下面咱們將一一進行介紹。程序員

流佈局

流佈局是相對比較簡單的一種佈局管理器,也是最經常使用的佈局管理器。在流佈局中放置控件時,將按照控件的添加順序,依次將控件從左到右進行擺放,而且在一行的最後會進行自動換行放置 。在一行中,控件是默認居中放置的。網絡

佈局管理器也是經過構造器來建立的。流佈局是經過FlowLayout 類來建立,FlowLayout類具備三種構造器。首先是無參構造器, 使用無參構造器可以建立一個默認的以居中對齊方式,控件間水 平和垂直間距爲5個像素的流佈局。佈局

FlowLayout類還具備一個須要整型參數的構造器,使用該構造器可以建立一個指定對齊方式的流佈局管理器,它的控件間水平和垂直間距仍然是默認的5個像素。流佈局管理器的對齊方式如表所示。學習

對齊方式 說明
LEFT 左對齊方式
CENTER 居中對齊方式
RIGHT 右對齊方式
LEADING 控件與容器開始邊對齊
TRAILING 控件與容器結束邊對齊

FlowLayout類還有一個具備三個參數的構造器,第一個參數表示流佈局管理器的對齊方式,第二個參數表示 流佈局管理器中控件間水平間距,第三個參數表示流佈局管理器中控件間垂直間距。 FlowLayout類中經常使用的方法:getAlignment方法和setAlignment方法分別獲取和設置流佈局管理器的對齊方式。 getHgap方法和setHgap方法分別獲取和設置流佈局管理器中控件和控件之間的水平間距。getVgap方法和setVgap方法分別獲取和 設置流佈局管理器中控件和控件之間的垂直間距。.net

//流佈局實例
JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("FlowLayout Test");
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    String text = "A JTextArea object represents "+"a multiline area for displaying text. "+ "You can change the number of lines」+"that can be displayed at a time. ";
     //定義指定文本,行數和列數的多行文本框
    JTextArea textArea1 = new JTextArea(text, 5, 10);
    textArea1.setPreferredSize(new Dimension(100, 100));
    JTextArea textArea2 = new JTextArea(text, 5, 10);
    textArea2.setPreferredSize(new Dimension(100, 100));
    //定義一個滑動面板,並設置水平和垂直方向上設置爲可滑動
    JScrollPane scrollPane = new JScrollPane(textArea2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,ScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
     //設置多行文本框文自動換行
    textArea1.setLineWrap(false);
    textArea2.setLineWrap(true);
    frame.add(textArea1);
    frame.add(scrollPane);
    frame.pack();
    frame.setVisible(true);

網格佈局

網絡佈局也是一種比較常見的佈局管理器。使用網格佈局管理器後,會將全部的控件儘可能按照給出的行數列數來排列,同時網格佈局管理器也會對控件進行尺寸的調整,使全部的控件具備相同的尺寸。在網格佈局中,也會盡可能使使用的空間成矩形的形式來顯示。當窗體發生大小變化時,全部的空間也將自動改變大小來填充窗體。code

網格佈局是經過GridLayout類來建立的。GridLayout類具備三個構造器,使用無參構造器將建立具備默認行和默認列的網格佈局。在建立網格佈局管理器時最經常使用的就是具備兩個整型參數的構造器,第一個參數表示網格佈局管理器的行數,第二個參數表示網格佈局管理器的列數。還有一個具備四個參數的構造器,除了能夠定義行數和列數外,還能夠定義控件間水平間距和垂直間距。htm

GridLayout類中還定義了一些方法來對建立的網格佈局進行操做 。getRows方法和setRows方法分別是獲取和設置網格佈局的行數。getColumns方法和setColumns方法分別是獲取和設置網格佈局 的列數。getHgap方法和setHgap方法分別是獲取和設置網格佈局 中控件間水平間距。getVgap方法和setVgap方法分別是獲取和設 置網絡佈局中的控件間垂直間距。blog

實例代碼:圖片

frame.setLayout(new GridLayout(3, 2));
    frame.add(new JButton("Button 1"));
    frame.add(new JButton("Button 2"));
    frame.add(new JButton("Button 3"));
    frame.add(new JButton("Button 4"));
    frame.add(new JButton("Button 5"));
    frame.add(new JButton("Button 6"));
    frame.add(new JButton("Button 7"));
    frame.add(new JButton("Button 8"));
    frame.pack();
    frame.setVisible(true);

效果圖:

這裏寫圖片描述

邊框佈局

上面學習的流佈局和網格佈局具備不少類似的地方,可是邊框佈局就和他們存在很大的不一樣。在使用邊框佈局時,一般都會由程序員來爲控件指定在容器中的位置。邊框佈局將容器分爲五個部分,包括東南西北中五部分。在每個部分中只能放置一個控件 ,因此若是控件超過五個將不能徹底顯示。在使用邊框佈局時需 要注意的是,當容器的大小發生變化時,四周的控件是不會發生變化的,只有中間的控件將發生變化。

邊框佈局是經過BorderLayout類建立的。BorderLayout類具備兩個構造器,一個是無參構造器,另外一個是指定控件間間距的構造器,一般使用無參構造器來建立邊框佈局管理器。

在前面將控件添加到容器中都是經過add方法,將控件做爲add方法的參 數來進行添加的。可是在向邊框佈局容器中添加控件時,這樣是不徹底 的。在向邊框佈局容器中添加控件是使用具備兩個參數的add方法。其中 第一個參數表示要添加的控件,第二個參數表示要添加到邊框佈局中的 哪個位置。邊框佈局的位置表示是經過常量來表示的,具體常量如表所示。

位置 說明
NORTH 容器頂部
SOUTH 容器底部
WEST 容器左邊
EAST 容器右邊
CENTER 容器的中央

實例代碼:

JFrame frame = new JFrame("BorderLayout Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    JTextField textField = new JTextField("<your name>");
    frame.add(textField, BorderLayout.WEST);
    JButton button = new JButton("<html>R<b>e</b>gister</html>");
    frame.add(button, BorderLayout.EAST);

效果圖:

這裏寫圖片描述

空佈局

空佈局就是沒有使用佈局管理器,在空佈局的狀況下將根據控件的自身信息來爲控件指定位置。這就使得控件的佈局更加靈活,與此同時給開發人員帶來了更大的工做量。

空佈局是不須要使用類來建立的,只須要在程序指定佈局管理器 爲null。將控件添加到空佈局容器中時,仍然是使用add方法。因 爲這裏使用的是空佈局管理器,因此在添加控件以前,要對控件 進行設置操做。設置操做是經過setBounds方法來完成的, setBounds方法的基本語法格式以下所示。

public void setBounds(int x,int y,int width,int height);

其中x和y表示的是控件最左上側的座標,從而也固定了該控件的 位置。width和height表示的是空間的寬度和高度,從而也指定了 控件的大小。

實例代碼:

frame.setLayout(null);//佈局管理器設置爲null
    JLabel label = new JLabel("First Name:");
    label.setBounds(20, 20, 100, 20);//四個參數分別是x,y座標和label的寬和高
    JTextField textField = new JTextField();
    textField.setBounds(124, 25, 100, 20);
    frame.add(label);
    frame.add(textField);

效果圖:

![這裏寫圖片描述](http://img.blog.csdn.net/20160921220141635)

卡片佈局

卡片佈局是經過CardLayout類建立的。CardLayout類具備兩個構造器,一個是無參構造器,另外一個是須要指定控件和容器邊界水平間距和垂直間距的構造器。這些已經在前面屢次介紹,這裏不 再做過多介紹。

在卡片佈局容器中一次只能顯示一個控件,要想顯示其餘控件, 就須要調用CardLayout類中的方法來執行。在CardLayout類的方法中,first方法和last方法分別是顯示第一次添加的控件和顯示最後一次添加的控件。next方法和previous方法分別是顯示下一 個添加控件和上一個添加控件。這四個方法都是具備一個參數的 ,該參數是指定對哪個容器中的控件進行操做。

CardLayout類中還有一個show方法,使用該方法能夠顯示指定的 控件,該方法具備兩個參數,第一個參數是指定對哪個容器中 的控件進行操做,第二個參數是指定要顯示控件的名稱。控件的 名稱是提早爲控件設置的。

爲控件起名稱是在添加控件的時候設置的,向卡片佈局容器中添 加控件一樣也是經過add方法來完成的。可是這裏的add方法須要兩個參數,第一個參數指定要添加的控件,第二個參數就是爲該 控件起的名稱。

相關文章
相關標籤/搜索