J2SE之GUI编程
AWT
Componet & Container
Frame
/* 范例名称: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); } }
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); } }
Pannel
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); } }
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); } }
练习
import java.awt.*; public class CenterPanel { public static void main(String args[]) { new MyFrame3(300,300,400,300,Color.BLUE); } } class MyFrame3 extends Frame{ private Panel p; MyFrame3(int x,int y,int w,int h,Color c){ super("FrameWithPanel"); setLayout(null); setBounds(x,y,w,h); setBackground(c); p = new Panel(null); p.setBounds(w/4,h/4,w/2,h/2); p.setBackground(Color.YELLOW); add(p); setVisible(true); } }
布局管理器
FlowLayout布局管理器
/* 范例名称:FlowLayout 用法举例 * 源文件名称:TestFlowLayout.java * 要 点: * 1. 布局管理器的概念和作用 * 2. FlowLayout的性质及用法 */ 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); } }
import java.awt.*; public class TestFlowLayout2 { public static void main(String args[]) { Frame f = new Frame("Java Frame"); 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布局管理器
/* 范例名称:BorderLayout应用举例 * 源文件名称:TestBorderLayout.java * 要 点:FlowLayout布局管理器的性质及用法 */ 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, "North"); f.add(bs, "South"); f.add(bw, "West"); f.add(be, "East"); f.add(bc, "Center"); // 也可使用下述语句 /* 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布局管理器
/* 范例名称:GridLayout应用举例 * 源文件名称:TestGridLayout * 要 点:GridLayout布局管理器的性质及用法 */ import java.awt.*; public class TestGridLayout { public static void main(String args[]) { Frame f = new Frame("GridLayout 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(); f.setVisible(true); } }
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("BUTTON"),BorderLayout.WEST); p1.add(new Button("BUTTON"),BorderLayout.EAST); p11.add(new Button("BUTTON")); p11.add(new Button("BUTTON")); p1.add(p11,BorderLayout.CENTER); p2.add(new Button("BUTTON"),BorderLayout.WEST); p2.add(new Button("BUTTON"),BorderLayout.EAST); for(int i =1;i<=4;i++) {p21.add(new Button("BUTTON"));} p2.add(p21,BorderLayout.CENTER); f.add(p1);f.add(p2); f.setVisible(true); } }
布局管理器总结
事件监听
/* 范例名称:Java事件处理举例 * 源文件名称:TestActionEvent.java * 要 点: * 1. Java事件处理机制 * 2. 事件源、事件监听器概念及作用 * 3. 如何在一个现有组件上注册监听器 */ import java.awt.*; import java.awt.event.*; public class TestActionEvent { public static void main(String args[]) { Frame f = new Frame("Test"); Button b = new Button("Press Me!"); Monitor bh = new Monitor(); b.addActionListener(bh); f.add(b,BorderLayout.CENTER); f.pack(); f.setVisible(true); } } class Monitor implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed"); } }
/* 范例名称:Java事件处理举例 * 源文件名称:TestActionEvent2.java * 要 点: * 1. 一个事件源组件上可以同时注册多个监听器 * 2. 一个监听器对象可以同时注册到多个事件源组件上 * 3. 事件源的信息可以随它所触发的事件自动传递到所有注册过的监听器 */ import java.awt.*; import java.awt.event.*; public class TestActionEvent2 { public static void main(String args[]) { Frame f = new Frame("Test"); Button b1 = new Button("Start"); Button b2 = new Button("Stop"); Monitor2 bh = new Monitor2(); b1.addActionListener(bh); b2.addActionListener(bh); b2.setActionCommand("game over"); f.add(b1,"North"); f.add(b2,"Center"); f.pack(); f.setVisible(true); } } class Monitor2 implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed," + "the relative info is:\n " + e.getActionCommand()); } }
TextField类
TextField事件监听
import java.awt.*; import java.awt.event.*; public class TFActionEvent { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new TFFrame(); } } class TFFrame extends Frame { TFFrame() { TextField tf = new TextField(); add(tf); tf.addActionListener(new TFActionListener()); pack(); setVisible(true); } } class TFActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { TextField tf = (TextField)e.getSource(); System.out.println(tf.getText()); //tf.setText(""); } }
import java.awt.*; import java.awt.event.*; public class TFPassword { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new TFFrame2(); } } class TFFrame2 extends Frame { TFFrame2() { TextField tf = new TextField(); add(tf); tf.addActionListener(new TFActionListener2()); tf.setEchoChar('*'); pack(); setVisible(true); } } class TFActionListener2 implements ActionListener { public void actionPerformed(ActionEvent e) { TextField tf = (TextField)e.getSource(); System.out.println(tf.getText()); tf.setText(""); } }
import java.awt.*; import java.awt.event.*; public class TFMath { public static void main(String[] args) { new TFFrame().launchFrame(); } } class TFFrame extends Frame { TextField num1, num2, num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15); Label lblPlus = new Label("+"); Button btnEqual = new Button("="); btnEqual.addActionListener(new MyMonitor()); setLayout(new FlowLayout()); add(num1); add(lblPlus); add(num2); add(btnEqual); add(num3); pack(); setVisible(true); } private class MyMonitor implements ActionListener { public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText("" + (n1+n2)); } } } //class MyMonitor implements ActionListener { //TextField num1, num2, num3; /* public MyMonitor(TextField num1, TextField num2, TextField num3) { this.num1 = num1; this.num2 = num2; this.num3 = num3; } */ /* TFFrame tf = null; public MyMonitor(TFFrame tf) { this.tf = tf; } public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(tf.num1.getText()); int n2 = Integer.parseInt(tf.num2.getText()); tf.num3.setText("" + (n1+n2)); } } */
内部类
Graphics类
import java.awt.*; public class TestPaint { public static void main(String[] args) { new PaintFrame().launchFrame(); } } class PaintFrame extends Frame { public void launchFrame() { setBounds(200,200,640,480); setVisible(true); } public void paint(Graphics g) { Color c = g.getColor(); g.setColor(Color.red); g.fillOval(50, 50, 30, 30); g.setColor(Color.green); g.fillRect(80,80,40,40); g.setColor(c); } }
鼠标事件适配器
import java.awt.*; import java.awt.event.*; import java.util.*; public class MyMouseAdapter{ public static void main(String args[]) { new MyFrame("drawing..."); } } class MyFrame extends Frame { ArrayList points = null; MyFrame(String s) { super(s); points = new ArrayList(); setLayout(null); setBounds(300,300,400,300); this.setBackground(new Color(204,204,255)); setVisible(true); this.addMouseListener(new Monitor()); } public void paint(Graphics g) { Iterator i = points.iterator(); while(i.hasNext()){ Point p = (Point)i.next(); g.setColor(Color.BLUE); g.fillOval(p.x,p.y,10,10); } } public void addPoint(Point p){ points.add(p); } } class Monitor extends MouseAdapter { public void mousePressed(MouseEvent e) { MyFrame f = (MyFrame)e.getSource(); f.addPoint(new Point(e.getX(),e.getY())); f.repaint(); } }
Window事件
import java.awt.*; import java.awt.event.*; public class TestWindowClose { public static void main(String args[]) { new MyFrame55("MyFrame"); } } class MyFrame55 extends Frame { MyFrame55(String s) { super(s); setLayout(null); setBounds(300, 300, 400, 300); this.setBackground(new Color(204, 204, 255)); setVisible(true); //this.addWindowListener(new MyWindowMonitor()); this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(-1); } }); } /* class MyWindowMonitor extends WindowAdapter { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } } */ }
/* 范例名称:匿名类在事件处理中的使用 * 源文件名称:TestAnonymous2.java * 要 点: * 1. 匿名类只能是内部类 * 2. 匿名类的两种创建方式----既可以继承父类、也可以单重实现接口 */ import java.awt.*; import java.awt.event.*; public class TestAnonymous2 { Frame f = new Frame("Test"); TextField tf = new TextField(10); Button b1 = new Button("Start"); public TestAnonymous2(){ f.add(b1,"North"); f.add(tf,"South"); b1.addActionListener(new ActionListener(){ private int i; public void actionPerformed(ActionEvent e) { tf.setText(e.getActionCommand() + ++i); } }); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.pack(); f.setVisible(true); } public static void main(String args[]) { new TestAnonymous2(); } }
练习
import java.awt.*; import java.awt.event.*; public class TestKey { public static void main(String[] args) { new KeyFrame().launchFrame(); } } class KeyFrame extends Frame { public void launchFrame() { setSize(200, 200); setLocation(300,300); addKeyListener(new MyKeyMonitor()); setVisible(true); } class MyKeyMonitor extends KeyAdapter { public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if(keyCode == KeyEvent.VK_UP) { System.out.println("UP"); } } } }
浙公网安备 33010602011771号