有关GUI编程的一些知识

1. [color=darkred]Container[/color] 和 [color=darkred]Component[/color]是AWT中的两个核心类。

2. 两种常用的Container: [color=darkred]Window[/color] 和 [color=darkred]Panel[/color]。 其中对于panel来说,其对象可以作为容纳其他Component对象,但不能独立存在,必须被添加到其他Container中(如window或Applet)。

3. 对于Frame,有如下小程序:

package com.java.TestFrame;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestFrame2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame f1 = new MyFrame(100, 100, 200, 200, Color.blue);
MyFrame f2 = new MyFrame(300, 100, 200, 200, Color.red);
MyFrame f3 = new MyFrame(100, 300, 200, 200, Color.cyan);
MyFrame f4 = new MyFrame(300, 300, 200, 200, Color.white);
f1.launchFrame();
f2.launchFrame();
f3.launchFrame();
f4.launchFrame();
}

}

class MyFrame extends Frame {
static int id = 0;
MyFrame(int x, int y, int w, int h, Color color) {
super("MyFrame" + (++id));
setBounds(x, y, w, h);
setBackground(color);
setLayout(null);
setVisible(true);
}

public void launchFrame() {
MyWindowMonitor mwm = new MyWindowMonitor();
this.addWindowListener(mwm);
}

private class MyWindowMonitor extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
setVisible(false);
System.exit(-1);
}

}
}


结果为:
[img]http://dl.iteye.com/upload/attachment/352280/070161fe-606b-3501-befa-1b140f281a73.jpg[/img]
并且可以点击X标志关闭!

4. Frame的缺省布局管理器为BorderLayout,而Panel的缺省布局管理器为FlowLayout。当用户需要亲自设置组件位置时,应取消布局管理器:setLayout(null)。

5. 两个简单的TextField事件监听小程序:
(1) 不包含内部类,“管家机制”传送一个类的引用到另一个类:

package com.java.TFMath;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TFMath {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame mf = new MyFrame();
mf.launchFrame();
}

}

class MyFrame extends Frame {

TextField num1,num2,num3;

public void launchFrame() {
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(15);
Label l = new Label("+");
Button b = new Button("=");

setLayout(new FlowLayout());
add(num1);
add(l);
add(num2);
add(b);
add(num3);
pack();
setVisible(true);

MyMonitor mm = new MyMonitor(this);
b.addActionListener(mm);
}
}

class MyMonitor implements ActionListener {

MyFrame mf = null;
MyMonitor(MyFrame mf) {
this.mf = mf;
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int n1 = Integer.parseInt(mf.num1.getText());
int n2 = Integer.parseInt(mf.num2.getText());

mf.num3.setText("" + (n1+n2));
// mf.num3.setText(Integer.toString(n1+n2));
}

}


程序运行结果为:

[img]http://dl.iteye.com/upload/attachment/352283/30eb4f47-81ed-38bd-bb4b-9231e2d7c488.jpg[/img]

(2)包含内部类的实现方法:

package com.java.TestTFMath2;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestTFMath2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame().launchFrame();
}

}

class MyFrame extends Frame {

TextField num1;
TextField num2;
TextField num3;

public void launchFrame() {
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(15);
Label l = new Label("*");
Button b = new Button("=");
setLayout(new FlowLayout());
add(num1);
add(l);
add(num2);
add(b);
add(num3);
pack();
setVisible(true);

b.addActionListener(new MyMonitor());
}

private class MyMonitor implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText(Integer.toString(n1*n2));
}

}
}


程序运行结果为:

[img]http://dl.iteye.com/upload/attachment/352285/88863afc-c9ae-3c92-8faf-f50710bafb11.jpg[/img]

6. Paint方法,有关鼠标事件适配器的一个小程序:
/*
* 同时综合了内部类、MouseAdapter、WindowAdapter、ArrayList、泛型等知识点!
*/

package com.java.MyMouseAdapter;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.*;

public class MyMouseAdapter {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame("drawing...").launchFrame();
}

}

class MyFrame extends Frame {
MyFrame(String name) {
super(name);
}

ArrayList <Point> points = null;

public void launchFrame() {
points = new ArrayList();
setLayout(null);
setBounds(300, 300, 400, 300);
setBackground(Color.WHITE);
setVisible(true);

this.addMouseListener(new Monitor());
this.addWindowListener(new MyWindowMonitor());

}

public void paint(Graphics g) {
Iterator <Point> i = points.iterator();
while (i.hasNext()) {
Point p = i.next();
Color c = g.getColor();
g.setColor(Color.BLACK);
g.fillRect(p.x, p.y, 10, 10);
g.setColor(c);
}
}

public void addPoint(Point p) {
points.add(p);
}

class Monitor extends MouseAdapter {

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
addPoint(new Point(e.getX(),e.getY()));
repaint();
}

}

class MyWindowMonitor extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
setVisible(false);
System.exit(-1);
}

}
}


运行结果为:

[img]http://dl.iteye.com/upload/attachment/352287/9debda9d-f129-30f4-b21a-49f478065882.jpg[/img]

7. 有关键盘事件的一个小程序:
package com.java.MyKeyAdapter2;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyKeyAdapter2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame().launchFrame();
}

}

class MyFrame extends Frame {
public void launchFrame() {
this.setBounds(100, 100, 200, 150);
setLayout(null);
setBackground(Color.WHITE);
setVisible(true);

this.addWindowListener(new MyWindowMonitor());
this.addKeyListener(new MyKeyMonitor());
}

private class MyKeyMonitor extends KeyAdapter {

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_UP) {
System.out.println("UP!");
}
}

}

private class MyWindowMonitor extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
setVisible(false);
System.exit(-1);
}

}
}


运行结果为:

[img]http://dl.iteye.com/upload/attachment/352293/02a28c5d-91f2-3ddb-89ac-a978702fb20a.jpg[/img]
每按一次“↑”键,终端自动打印“UP!”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值