Java- 幾種常見的布局管理


  使用Eclipse做Java的WinForm程序時,並沒有拖拉控件的方式。在VS里感受了拖拉控件的好處,看到Java沒有,感覺很不習慣。但是Java提供了各種各樣的布局管理,使用這些布局管理可以做到更精確的布局吧?我只是想簡單的接觸下Java,而且這塊感覺就像Java所特有的,不太喜歡。所以簡單了解一下就可以了!

  AWT(Abstract Windows Toolkit)抽象窗口開發包,用於Java ApplicationGUI編程。本質是希望跨平台。ContainerComponentAWT中兩個核心類。

 

  Component又包括一個子類ContainerJava圖形用戶界面最基本組成部分是ComponentComponent類及其子類的對象用來描述以圖形化方式顯示在屏幕上並能與用戶進行交互的GUI元素。一般的Component對象不能獨立的顯示出來,必須與某一Container對象中才可以顯示出來。

創建Windows窗體的方法一

View Code
public class vvv {
    public static void main(String[] args) throws Exception {    
        Frame f = new Frame("Test");
        f.setSize(170,200);
        f.setBackground(Color.blue);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });
    }
}

創建Windows窗體的方法二

View Code
import java.awt.Color;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class vvv {
    public static void main(String[] args) throws Exception {

        MyFrame frame = new MyFrame("這是一個窗體", 100, 100, 300, 400, Color.blue);
    }
}

class MyFrame extends Frame {
    MyFrame(String name, int x, int y, int width, int height, Color c) {
        super(name);
        this.setBackground(c);
        this.setBounds(x, y, width, height);
        this.setVisible(true);
        this.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                System.exit(0);
            }
        });
    }
}

 

AWT提供了5種布局管理器類
FlowLayout 、BorderLayout、GridLayout、CardLayout、GridBagLayout

1.FlowLayout是Panel類的默認布局管理器。
FlowLayout布局管理器對組件逐行定位,行內從左到右,一行排滿后換行。可以設不同的間距及對齊方式,默認的對齊方式是局中。

View Code
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class vvv {
    public static void main(String[] args) throws Exception {
        
        Frame f = new Frame("FlowLayout Demo");
        Button btn1 = new Button("Button1");
        Button btn2 = new Button("Button2");
        Button btn3 = new Button("Button3");
        Button btn4 = new Button("Button4");
        Button btn5 = new Button("Button5");
        Button btn6 = new Button("Button6");
        Button btn7 = new Button("Button7");
        
        Panel panel = new Panel();
        panel.setLayout(new FlowLayout(FlowLayout.LEFT,25,25));//設置向左對齊,垂直間距5,水平間距5
        panel.add(btn1);
        panel.add(btn2);
        panel.add(btn3);
        panel.add(btn4);
        panel.add(btn5);
        panel.add(btn6);
        panel.add(btn7);
        
        f.setBounds(100, 100, 500, 400);
        f.add(panel);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                super.windowClosing(e);
                System.exit(0);
            }
        });
        
    }
}

2.BorderLayout是Frame類的默認布局管理器,BorderLayout將整個容器的布局划分成
東(EAST)西(WEST)南(SOUTH)北(NORTH)中(CENTER)
如不指定組件的加入部位,則默認加入到CENTER區。
每個區域只能加入一個組件,如加入多個,則先前加入的會被覆蓋。

View Code
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class vvv {
    public static void main(String[] args) throws Exception {
        
        Frame f = new Frame("FlowLayout Demo");
        Button btn1 = new Button("Button1");
        Button btn2 = new Button("Button2");
        Button btn3 = new Button("Button3");
        Button btn4 = new Button("Button4");
        Button btn5 = new Button("Button5");
        
        f.setLayout(new BorderLayout());
        f.add(btn1,BorderLayout.EAST);
        f.add(btn2,BorderLayout.WEST);
        f.add(btn3,BorderLayout.NORTH);
        f.add(btn4,BorderLayout.SOUTH);
        f.add(btn5,BorderLayout.CENTER);
        
        f.setBounds(100, 100, 500, 400);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                super.windowClosing(e);
                System.exit(0);
            }
        });
        
    }
}

3.GridLayout型布局管理器將空間划分成規則的矩形網格,每個單元格區域大小相等。組件被添加到每個單元格中,先從左到右滿一行后換行,再從上到下。
在GridLayout構造方法中指定分割的行數和列數
如:GridLayout(3,4);

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class vvv {
    public static void main(String[] args) throws Exception {
        
        Frame f = new Frame("GridLayout Demo");
        Button btn1 = new Button("Button1");
        Button btn2 = new Button("Button2");
        Button btn3 = new Button("Button3");
        Button btn4 = new Button("Button4");
        Button btn5 = new Button("Button5");
        Button btn6 = new Button("Button6");
        Button btn7 = new Button("Button7");
        Button btn8 = new Button("Button8");
        Button btn9 = new Button("Button9");
        Button btn10 = new Button("Button10");
        
        
        f.setLayout(new GridLayout(3,4));
        f.add(btn1);
        f.add(btn2);
        f.add(btn3);
        f.add(btn4);
        f.add(btn5);
        f.add(btn6);
        f.add(btn7);
        f.add(btn8);
        f.add(btn9);
        f.add(btn10);
        
        f.setBounds(100, 100, 250, 150);
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                super.windowClosing(e);
                System.exit(0);
            }
        });
        
    }
}

  

  如果在Frame想加入Panel的布局,那么需先將Frame有布局方式清空。
  布局管理器的總結:Frame是一個頂級窗口,Frame的缺省布局管理器為BorderLayout。所以如果直接往Frame里面放一個Panel,他將會把Panel放大居中。如果用戶需要親自設置組件大小或位置,則應取消容器的布局管理器,方法為 setLayout(null);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM