java中的swing元件、主要三大布局管理器的應用
一、JFrame的簡單運用:
package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_1 extends JFrame{ //定義按鈕元件 JButton jb1=null; public static void main(String[] args) { Demo1_1 dm=new Demo1_1(); } //建構函式 public Demo1_1() { //初始化按鈕元件 jb1=new JButton("按鈕1"); //新增元件 this.add(jb1); //設定視窗標題 this.setTitle("Hello world"); //設定視窗大小,視窗大小的單位是畫素 this.setSize(200, 200); //設定視窗位置,視窗位置定義的是視窗最左上角的點的座標 this.setLocation(100, 100); //設定當關閉視窗時保證JVM也退出 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //顯示視窗 this.setVisible(true); } }
二、佈局管理器--介紹
1、概念:元件在容器(比如JFrame)中的位置和大小是由佈局管理器來決定的。所有的容器都會使用一個佈局管理器,通過它來自動進行元件的佈局管理。
2、種類:java共提供了五種佈局管理器:流式佈局管理器(FlowLayout)、邊界佈局管理器(BorderLayout)、網格佈局管理器(GridLayout)、卡片佈局管理器(CardLayout)、網格包佈局管理器(GridBagLayout)。其中前三種是最常見的佈局管理器。
介紹:
(一)、邊界佈局管理器(BorderLayout):將容器簡單的劃分為東南西北中五個區域,
中間區域最大,JFrame預設此佈局。
案例程式碼:
/* * BorderLayout演示 * 1、繼承JFrame * 2、定義你需要的元件 * 3、建立元件(建構函式裡初始化建立) * 4、新增元件(引用邊界佈局管理器來新增元件的過程中佈局) * 5、對窗體的設定 * 6、顯示窗體 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_2 extends JFrame{ //定義五個元件 JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_2 dm=new Demo1_2(); }
//建構函式 public Demo1_2() { //建立元件 jb1=new JButton("中部"); jb2=new JButton("北部"); jb3=new JButton("東部"); jb4=new JButton("南部"); jb5=new JButton("西部"); //新增元件 this.add(jb1, BorderLayout.CENTER); this.add(jb2, BorderLayout.NORTH); this.add(jb3, BorderLayout.EAST); this.add(jb4, BorderLayout.SOUTH); this.add(jb5, BorderLayout.WEST); //設定窗體屬性 //窗體標題 this.setTitle("邊界佈局案例"); //設定窗體大小 this.setSize(300, 300); //設定窗體位置 this.setLocation(800, 400); //設定關閉窗體同時退出JVM this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //顯示窗體 this.setVisible(true); } }
邊界佈局管理器(BorderLayout)--注意事項:
1、不是五個部分都必須新增
2、中部元件會自動的調節大小(中間部分最強勢)
3、JFrame,JDialog預設佈局管理器就是BorderLayout
(二)、流式佈局管理器(FlowLayout): 按照元件新增的次序將定義的元件從左至右放置到容器中,當達到容器的邊界時,元件將放置在下一行中。FloeLayout可以選擇以左對齊、居中對齊、以右對齊的方式排列元件。
案例程式碼如下:
/* * 流式佈局案例 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_3 extends JFrame{ JButton jb1,jb2,jb3,jb4,jb5,jb6; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_3 dm=new Demo1_3(); } //構造 public Demo1_3() { //建立元件 jb1=new JButton("關羽"); jb2=new JButton("張飛"); jb3=new JButton("趙雲"); jb4=new JButton("馬超"); jb5=new JButton("黃忠"); jb6=new JButton("魏延"); //新增元件 this.add(jb1); this.add(jb2); this.add(jb3); this.add(jb4); this.add(jb5); this.add(jb6); //設定佈局管理器,流式佈局預設是中間對齊, //我們要在new FlowLayout(FlowLayout.LEFT)設定,此時設定的是左對齊 this.setLayout(new FlowLayout(FlowLayout.LEFT)); //設定窗體屬性 //窗體標題 this.setTitle("邊界佈局案例"); //設定窗體大小 this.setSize(300, 300); //設定窗體位置 this.setLocation(800, 400); //設定關閉窗體同時退出JVM this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //顯示窗體 this.setVisible(true); } }
流式佈局(FlowLayout)--注意事項
1、不限制他所管理的元件的大小,允許他們有最佳大小
2、當容器被縮放時,元件的位置可能變化,但是元件的大小不變
3、預設元件是居中對齊,可以通過FlowLayout(intalign)函式來指定對齊方式
(三)、網格佈局GridLayout:它將容器分割成多行多列,元件被填充到每個網格中,新增到容器中的元件首先放置在左上角的網格中,然後從左到右放置其他的元件,當佔滿該行的所有網格後,接著繼續在下一行從左至右放置元件。
案例程式碼如下:
/* * 網格佈局演示 */ package com.test1; import java.awt.*; import javax.swing.*; public class Demo1_4 extends JFrame{ //定義元件 int size=9; JButton jbs[]=new JButton[size]; public static void main(String[] args) { // TODO Auto-generated method stub Demo1_4 dm=new Demo1_4(); } //構造 public Demo1_4() { //建立元件 for(int i=0;i<size;i++) { jbs[i]=new JButton(String.valueOf(i)); } //設定網格佈局管理器,設定3行3列,每個元件間隔水平方向10,垂直方向10 個畫素 this.setLayout(new GridLayout(3,3,10,10)); //新增元件 for(int i=0;i<size;i++) { this.add(jbs[i]); } //設定窗體屬性 this.setTitle("網格佈局案例"); this.setSize(300,300); this.setLocation(700,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
網格佈局GridLayout --注意事項
1、元件的相對位置不隨容器的縮放變化,但是元件的大小會變,也就是講我們縮放視窗時元件之間的間隙是不會隨之變化的,但是元件大小會等比例的變化
2、所有元件的大小是相同的
3、可以通過GridLayout(int rows,int cols,int hgap,int vgap)來指定網格的行/列,水平間隙/垂直間隙。