馬士兵 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