我感觉通过代码来学一门语言的语法比较快。
运行结果:
代码:
1 /*awt是抽象窗口工具集(Abstract Window Toolkit)*/
2 import java.awt.*;
3 /*Swing程序包来自名为javax的类库(Java eXtension)*/
4 import javax.swing.*;
5 /*event程序包包含事件处理所需的所有类*/
6 import java.awt.event.*;
7
8 public class Change
9 {
10 public static void main(String[] args)
11 {
12 new ChangingFace();//创建SmileyFace对象
13 }
14 }
15
16 /*JFrame是Swing程序包的一个组件,它的作用是形成一个用以显示图形的可视窗口。
17 * */
18
19 /*关键字implements连接一个接口类(如ActionListener)时,到达了与继承
20 * 相似的结果。ActionListener类是一个特殊的类,称为接口类:接口类只包含
21 * 一些抽象方法,这意味着所有子类都必须为这些抽象方法编写方法体。本例中,
22 * ActionListener类要求实现一个名为actionPerformed的方法,该方法用
23 * 于处理程序接收的事件
24 * */
25 class ChangingFace extends JFrame implements ActionListener
26 {
27 private boolean isHappy = true;
28 /**JButton是Swing程序包中的类,JButton类具有一个构造函数,允许
29 * 程序员根据指定的caption(这里是Smile,Frown)创建按钮
30 */
31
32 private JButton happyButton = new JButton("Smile");
33 private JButton sadButton = new JButton("Frown");
34
35 public ChangingFace()//构造函数
36 {
37 setTitle("Changing Face");//标题
38 /*一个容器(就像扩展JFrame类的ChangingFace类)总是需要一个与之
39 * 相关联的布局规则——该规则决定了组件添加进该容器的方式。JFrame类的
40 * 默认规则是BorderLayout规则。程序中需要的规则是FlowLayout
41 * 规则,该规则的含义是所有的组件都以它们被加入的顺序放置。如果当前行
42 * 被占满,就从下一行开始放置。
43 * */
44 setLayout(new FlowLayout());
45
46 /*添加按钮*/
47 add(happyButton);
48 add(sadButton);
49 /*这里没有调用Frame本身的setBackground方法,而是调用了框架的
50 * Content Pane(内容窗格)的方法。
51 * */
52 getContentPane().setBackground(Color.yellow);
53 /*接下来考虑:当按钮被按下时,可以显示期望的结果。这部分内容
54 * 成为事件处理。
55 * */
56 /*通过将一个ActionListener的对象添加到另一个对象(如一个按钮),
57 * 可以使该对象listen鼠标单击的动作。这样程序可以根据鼠标单击事件
58 * 采取某个行动。
59 * 采取的行动取决于编写的一个特殊的例程,该例程被称为事件处理器。
60 * */
61 happyButton.addActionListener(this);
62 sadButton.addActionListener(this);
63
64 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
65 setSize(250,200);//像素
66 setLocation(300,300);//框架左上角相对于屏幕左上角的位置
67
68 setVisible(true);//使Frame可见
69 }
70
71 public void paint(Graphics g)
72 {
73 super.paint(g);//调用超类JFrame的构造函数
74 g.setColor(Color.red);//设置下面图形的颜色为红色
75 g.drawOval(85,75,75,75);
76 g.setColor(Color.blue);//设置下面图形的颜色为蓝色
77 g.drawOval(100,95,10,10);//左眼
78 g.drawOval(135,95,10,10);//右眼
79
80 g.drawString("Changing Face",80,185);//显示字符串
81 if( isHappy == true )
82 g.drawArc(102,115,40,25,0,-180);
83 else
84 g.drawArc(102,115,40,25,0,180);
85 }
86 /*通过为ActionListener接口要求的actionPerformed方法编写代码,可
87 * 以控制鼠标按键被单击时程序的行为。当鼠标被单击时,该方法自动发送一个
88 * ActionEvent对象。ActionEvent类包含一个名为getSource的方法,
89 * 该方法可以返回被单击对象的名称
90 * */
91 public void actionPerformed(ActionEvent e)
92 {
93 if(e.getSource() == happyButton)
94 {
95 isHappy = true;
96 repaint();
97 }
98 if(e.getSource() == sadButton)
99 {
100 isHappy = false;
101 repaint();
102 }
103 }
104 }