Java基礎——GUI編程(三)

來源:互聯網
上載者:User

標籤:orm   and   UI   顯示檔案   並且   txt   back   contain   car   

接著前兩篇學習筆記,這篇主要介紹布局管理器和對話方塊兩部分內容。

一、布局管理器

先拿一個小例子來引出話題,就按照我們隨意的添加兩個按鈕來說,會產生什麼樣的效果,看執行結果。

import java.awt.Button;import java.awt.Frame;public class Test25 {    public static void main(String[] args) {        Frame f = new Frame("布局管理器");        f.setSize(300, 400);        f.add(new Button("按鈕A"));        f.add(new Button("按鈕B"));        f.setVisible(true);    }}

執行結果:

從運行程式中,只看到了第二個按鈕B。

原因是每個組件,在容器中都有一個具體的位置和大小,想在容器中排列組件時很難確定其位置,為簡化使用者的控制,Java採取布局管理器進行管理可以為容器指定不同的布局管理器。

1.BorderLayout (邊界布局,預設的模式) 將容器分為東南西北中五個地區

  Frame f=new Frame("布局管理器");      f.add(new Button("按鈕A"),BorderLayout.NORTH);      f.add(new Button("按鈕B"));      f.add(new Button("按鈕C"),"East");      f.setBounds(20,20,300,300);      f.setVisible(true);

2. FlowLayout  從左至右,從上到下,如果我們在FlowLayout布局中加入 "North","East" 之類的參數,將被忽略

Frame f=new Frame("布局管理器");    f.setLayout(new FlowLayout() );    f.add(new Button("按鈕A"),BorderLayout.NORTH);    f.add(new Button("按鈕B"));    f.add(new Button("按鈕B"));

3. GridLayout  網格,從左至右,從上到下,該布局總是忽略組件的最佳大小,所有單元的寬度是相同的

4.CardLayout  選項卡布局

5.GridBagLayout 布局之王,功能強大,使用複雜,

6.BoxLayOut  Swing 中新增的一種布局管理器,允許多個組件全部垂直或水平擺放,嵌套多個該布局管理器的Panel,可以實作類別似

7.GridBagLayout 的功能,但要比使用 GridBagLayOut 簡單的多

比較複雜點的代碼例子(目的是左邊一列三行網格布局,右邊選項卡布局,並且左邊的按鈕按下會引發右邊相應變化)

import java.awt.BorderLayout;import java.awt.Button;import java.awt.CardLayout;import java.awt.Color;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;//布局的例子class LayoutTest {    public LayoutTest() {        init();    }    CardLayout cl = new CardLayout(); // 卡片布局    Panel plCenter = new Panel(); // 面板,容器    private void init() {        Frame f = new Frame();        Panel plWest = new Panel();        plWest.setBackground(Color.pink);        plCenter.setBackground(Color.DARK_GRAY);        f.add(plWest, BorderLayout.WEST); // 往左邊放        f.add(plCenter);        plWest.setLayout(new GridLayout(3, 1)); // 網格布局,三行,一列        Button btnPrev = new Button("前一個");        Button btnNext = new Button("後一個");        Button btnThree = new Button("第三個");        plWest.add(btnPrev);        plWest.add(btnNext);        plWest.add(btnThree);        plCenter.setLayout(cl); // 中間的主面板,設為卡片布局        plCenter.add(new Button("A"), "1AAA");        plCenter.add(new Button("B"), "2AAA");        plCenter.add(new Button("C"), "3AAA");        plCenter.add(new Button("D"), "4AAA");        plCenter.add(new Button("E"), "5AAA");        plCenter.add(new Button("F"), "6AAA");        // 用於按鈕事件處理的內部類        class MyActionListener implements ActionListener {            public void actionPerformed(ActionEvent e) {                if (e.getActionCommand().equals("前一個")) {                    cl.previous(plCenter);                } else if (e.getActionCommand().equals("後一個")) {                    cl.next(plCenter);                } else if (e.getActionCommand().equals("第三個")) {                    cl.show(plCenter, "5AAA"); // 指定顯示哪一個                }            }        }        MyActionListener listener = new MyActionListener();        btnPrev.addActionListener(listener);        btnNext.addActionListener(listener);        btnThree.addActionListener(listener);        f.setSize(300, 300);        f.setVisible(true);        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                System.exit(0);            }        });    }}class Test26 {    public static void main(String[] args) {        new LayoutTest();    }}

注意:取消布局管理器(代碼例子如下)

可以使用絕對座標的方式來指定組件的位置和大小,這時,我們要調用Container.setLayout(null), 然後再調用 Container.setBounds()方法。

import java.awt.Button;import java.awt.Frame;public class Test27 {    // 例子,自訂按鈕的位置    public static void main(String[] args) {        Frame f = new Frame();        f.setSize(500, 400);        f.setLayout(null); // 取消布局管理器        Button btn = new Button("這是按鈕");        btn.setBounds(50, 50, 80, 40);        f.add(btn);        f.setVisible(true);    }}

二、對話方塊(Dialog)

對話方塊在我們日常用電腦時經常見到,不再贅述。直接上代碼例子,熟練一下應用。

import java.awt.Button;import java.awt.Dialog;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.Label;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;public class Test28 {    public static void main(String[] args) {        new MyWindow();    }}class MyWindow {    MyWindow() {        init();    }    private Dialog dlg; // 對話方塊    private Label lblMsg; // 標籤    private Frame f;    private Button btn;    private TextField txtDir; // 用來輸入目錄名稱    private TextArea txtFileList; // 用來顯示檔案清單    private void init() {        f = new Frame("目錄查看器");        f.setBounds(30, 30, 400, 400);        f.setLayout(new FlowLayout());        txtDir = new TextField(30); // 30個字元長度        btn = new Button("顯示檔案");        txtFileList = new TextArea(20, 35); // 用來顯示檔案清單的地區        f.add(txtDir);        f.add(btn);        f.add(txtFileList);        dlg = new Dialog(f, "提示資訊"); // 這個true代表它是否是模態的
//如果是dlg=new Dialog(f, "提示資訊",true),代表彈出來對話方塊以後,就不可以再對後面的對話方塊進行操作了
lblMsg = new Label("輸入的目錄不正確"); dlg.add(lblMsg); dlg.setBounds(200, 200, 250, 100); dlg.setLayout(new FlowLayout()); initEvent(); f.setVisible(true); } private void initEvent() { dlg.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ((Dialog) e.getSource()).setVisible(false); // dlg.setVisible(false); }; }); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { txtFileList.setText(""); String dirStr = txtDir.getText(); // 取出使用者輸入的路徑 File file = new File(dirStr); if (file.isDirectory() && file.exists()) { String[] fileNameList = file.list(); for (String s : fileNameList) { txtFileList.append(s + "\r\n"); // 不要忘了加分行符號 } } else { // txtFileList.append("你輸入的都是啥?"); dlg.setVisible(true); } } }); }}

Java基礎——GUI編程(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.