馬士兵 J2SE 第11章 GUI編程 GUI初步和布局管理器
/* 範例名稱:Frame 應用舉例
* 源文件名稱:TestFrame.java
* 要 點:Frame組件的創建及顯示設置
*/
import java.awt.*;
public class TestFrame {
public static void main( String args[]) {
Frame f = new Frame("My First Test");
f.setLocation(300, 300);
f.setSize( 170,100);
f.setBackground( Color.blue);
f.setResizable(false);
f.setVisible( true);
}
}
關閉:
暫時使用CTRL+C關閉
多重FRAME
package com.zzk.cn;
import java.awt.*;
public class TestMultiFrame {
public static void main(String args[]) {
MyFrame f1=new MyFrame(100,100,200,200,Color.BLUE);
MyFrame f2=new MyFrame(300,100,200,200,Color.YELLOW);
MyFrame f3=new MyFrame(100,300,200,200,Color.GREEN);
MyFrame f4=new MyFrame(300,300,200,200,Color.MAGENTA);
}
}
class MyFrame extends Frame {
static int id=0;
MyFrame(int x,int y,int w,int h,Color color) {
super("MyFrame "+(++id));
setBackground(color);
setLayout(null);
setBounds(x,y,w,h);
setVisible(true);
}
}
PANEL應用舉例
package com.zzk.cn;
import java.awt.*;
public class TestPanel {
public static void main(String args[]) {
Frame f=new Frame("Java Frame with Panel");
Panel p=new Panel(null);
f.setLayout(null);
f.setBounds(300,300,500,500);
f.setBackground(new Color(0,0,102));
p.setBounds(50,50,400,400);
p.setBackground(new Color(204,204,255));
f.add(p);
f.setVisible(true);
}
}
多重PANEL
package com.zzk.cn;
import java.awt.*;
public class TestMultiPanel {
public static void main(String[] args) {
new MyFrame2("MyFrameWithPanel",300,300,400,300);
}
}
class MyFrame2 extends Frame {
private Panel p1,p2,p3,p4;
MyFrame2(String s,int x,int y,int w,int h) {
super(s);
setLayout(null);
p1=new Panel(null);
p2=new Panel(null);
p3=new Panel(null);
p4=new Panel(null);
p1.setBounds(0,0,w/2,h/2);
p2.setBounds(0,h/2,w/2,h/2);
p3.setBounds(w/2,0,w/2,h/2);
p4.setBounds(w/2,h/2,w/2,h/2);
p1.setBackground(Color.BLUE);
p2.setBackground(Color.GREEN);
p3.setBackground(Color.YELLOW);
p4.setBackground(Color.MAGENTA);
add(p1);
add(p2);
add(p3);
add(p4);
setBounds(x,y,w,h);
setVisible(true);
}
}
習題:設計一個含有Panel的自定義的Frame類,Panel位於中間
我的代碼如下:
package com.zzk.cn;
import java.awt.*;
public class CenterPanel {
public static void main(String[] args) {
new MyFrame3("MyFrameWithPanel",300,300,300,300);
}
}
class MyFrame3 extends Frame {
private Panel p1;
MyFrame3(String s,int x,int y,int w,int h) {
super(s);
setLayout(null);
p1=new Panel(null);
setBounds(x,y,w,h);
p1.setBounds(x/4,y/4,w/2,h/2);
p1.setBackground(Color.YELLOW);
add(p1);
setBounds(x,y,w,h);
setBackground(Color.blue);
setVisible(true);
}
}
馬士兵的代碼如下:
package com.zzk.cn;
import java.awt.*;
public class CenterPanelDemo {
public static void main(String[] args) {
new MyFrame4(300,300,400,300,Color.BLUE);
}
}
class MyFrame4 extends Frame {
private Panel p;
MyFrame4(int x,int y,int w,int h,Color c) {
super("FrameWithPanel");
setLayout(null);
p=new Panel(null);
setBounds(x,y,w,h);
setBackground(c);
p.setBounds(x/4,y/4,w/2,h/2);
p.setBackground(Color.YELLOW);
add(p);
setBounds(x,y,w,h);
setBackground(Color.blue);
setVisible(true);
}
}
從馬士兵代碼中學到的:
PANEL提取出屬性,方便以後程序的擴展
參數的傳遞
FlowLayout布局管理器,流水線式布局
package com.zzk.cn;
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame f=new Frame("Flow Layout");
Button button1=new Button("OK");
Button button2=new Button("Open");
Button button3=new Button("Close");
f.setLayout(new FlowLayout());
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
指定左對齊
package com.zzk.cn;
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame f=new Frame("Flow Layout");
Button button1=new Button("OK");
Button button2=new Button("Open");
Button button3=new Button("Close");
f.setLayout(new FlowLayout(FlowLayout.LEFT));
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
第二個FLOWLAYOUT程序示例
package com.zzk.cn;
import java.awt.*;
public class TestFlowLayout2 {
public static void main(String[] args) {
Frame f=new Frame("Java Frame");
//中間間距20,垂直間距40
FlowLayout l=new FlowLayout(FlowLayout.CENTER,20,40);
f.setLayout(l);
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
for(int i=1;i<=7;i++) {
f.add(new Button("BUTTON"));
}
f.setVisible(true);
}
}
能在編譯間出現的錯誤,不要出現在運行間
BorderLayout布局管理器
package com.zzk.cn;
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame f;
f=new Frame("Border Layout");
Button bn=new Button("BN");
Button bs=new Button("BS");
Button bw=new Button("BW");
Button be=new Button("BE");
Button bc=new Button("BC");
f.add(bn,BorderLayout.NORTH);
f.add(bs,BorderLayout.SOUTH);
f.add(bw,BorderLayout.WEST);
f.add(be,BorderLayout.EAST);
f.add(bc,BorderLayout.CENTER);
f.setSize(200,200);
f.setVisible(true);
}
}
GRIDLAYOUT布局管理器
package com.zzk.cn;
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame f=new Frame("GirdLayout example");
Button b1=new Button("b1");
Button b2=new Button("b2");
Button b3=new Button("b3");
Button b4=new Button("b4");
Button b5=new Button("b5");
Button b6=new Button("b6");
f.setLayout(new GridLayout(3,2));
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.pack();//不寫PACK就不顯示,打包
f.setVisible(true);
}
}
習題
package com.zzk.cn;
import java.awt.*;
public class TenButtons {
public static void main(String[] args) {
Frame f=new Frame("Java Frame");
f.setLayout(new GridLayout(2,1));//兩行一列
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
Panel p1=new Panel(new BorderLayout());
Panel p2=new Panel(new BorderLayout());
Panel p11=new Panel(new GridLayout(2,1));
Panel p21=new Panel(new GridLayout(2,2));
p1.add(new Button("1"),BorderLayout.WEST);
p1.add(new Button("1"),BorderLayout.EAST);
p11.add(new Button("2"));
p11.add(new Button("3"));
p1.add(p11,BorderLayout.CENTER);
p2.add(new Button("4"),BorderLayout.WEST);
p2.add(new Button("5"),BorderLayout.EAST);
for(int i=1;i<=4;i++) {
p21.add(new Button("6"));
}
p2.add(p21,BorderLayout.CENTER);
f.add(p1);
f.add(p2);
f.setVisible(true);
}
}
最後更新:2017-04-02 06:52:18