1110
内部类
利用内部类在1109的两个方法的基础上改进加法运算的实现
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);
}
class MyMonitor implements ActionListener {
//MyMonitor类声明在TFFrame类的内部,与成员变量的位置并列等同即声明在包装类内且方法外(注意不可以设置在TFFrame类的成员方法中)。这样就可以访问其包装类的成员变量和成员方法(这是内部类经常使用的方式)。这样做也避免了其他的类来访问监听器类,即保护了监听器类。也可声明为private class
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText("" + (n1+n2));
}
}
}
1111
Paint方法
Graphics
类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
每个Component都有一个paint(Graphics
g
)用于实现绘图目的,每次重画该Component时都自动调用paint方法。什么是重画呢?就是需要再次显示这个Component时(比如一个Frame)比如在最小化,然后最大化或者复原时。因为在一个Component重新显示时,这些图像需要重新显示
例子:
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) {//见下。具体的Component具体重写此方法
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);//将画笔颜色还原即恢复现场
}
}
分析将Graphics想象为一个画笔类,那么g是一支画笔。
一定要注意paint()方法在哪个类里面,则画笔在哪个类中被使用。且这个paint方法是被自动调用的
paint()方法来自于Frame的父类Container类
Container类方法public void paint(Graphics g)绘制容器。该方法将paint转发给任意一个此容器子组件的轻量级组件