您的位置:首页 > 产品设计 > UI/UE

变脸(GUI)

2012-03-03 20:29 197 查看
我感觉通过代码来学一门语言的语法比较快。

运行结果:





代码:

/*awt是抽象窗口工具集(Abstract Window Toolkit)*/
import java.awt.*;
/*Swing程序包来自名为javax的类库(Java eXtension)*/
import javax.swing.*;
/*event程序包包含事件处理所需的所有类*/
import java.awt.event.*;

public class Change
{
public static void main(String[] args)
{
new ChangingFace();//创建SmileyFace对象
}
}

/*JFrame是Swing程序包的一个组件,它的作用是形成一个用以显示图形的可视窗口。
* */

/*关键字implements连接一个接口类(如ActionListener)时,到达了与继承
* 相似的结果。ActionListener类是一个特殊的类,称为接口类:接口类只包含
* 一些抽象方法,这意味着所有子类都必须为这些抽象方法编写方法体。本例中,
* ActionListener类要求实现一个名为actionPerformed的方法,该方法用
* 于处理程序接收的事件
* */
class ChangingFace extends JFrame implements ActionListener
{
private boolean isHappy = true;
/**JButton是Swing程序包中的类,JButton类具有一个构造函数,允许
* 程序员根据指定的caption(这里是Smile,Frown)创建按钮
*/

private JButton happyButton = new JButton("Smile");
private JButton sadButton = new JButton("Frown");

public ChangingFace()//构造函数
{
setTitle("Changing Face");//标题
/*一个容器(就像扩展JFrame类的ChangingFace类)总是需要一个与之
* 相关联的布局规则——该规则决定了组件添加进该容器的方式。JFrame类的
* 默认规则是BorderLayout规则。程序中需要的规则是FlowLayout
* 规则,该规则的含义是所有的组件都以它们被加入的顺序放置。如果当前行
* 被占满,就从下一行开始放置。
* */
setLayout(new FlowLayout());

/*添加按钮*/
add(happyButton);
add(sadButton);
/*这里没有调用Frame本身的setBackground方法,而是调用了框架的
* Content Pane(内容窗格)的方法。
* */
getContentPane().setBackground(Color.yellow);
/*接下来考虑:当按钮被按下时,可以显示期望的结果。这部分内容
* 成为事件处理。
* */
/*通过将一个ActionListener的对象添加到另一个对象(如一个按钮),
* 可以使该对象listen鼠标单击的动作。这样程序可以根据鼠标单击事件
* 采取某个行动。
* 采取的行动取决于编写的一个特殊的例程,该例程被称为事件处理器。
* */
happyButton.addActionListener(this);
sadButton.addActionListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(250,200);//像素
setLocation(300,300);//框架左上角相对于屏幕左上角的位置

setVisible(true);//使Frame可见
}

public void paint(Graphics g)
{
super.paint(g);//调用超类JFrame的构造函数
g.setColor(Color.red);//设置下面图形的颜色为红色
g.drawOval(85,75,75,75);
g.setColor(Color.blue);//设置下面图形的颜色为蓝色
g.drawOval(100,95,10,10);//左眼
g.drawOval(135,95,10,10);//右眼

g.drawString("Changing Face",80,185);//显示字符串
if( isHappy == true )
g.drawArc(102,115,40,25,0,-180);
else
g.drawArc(102,115,40,25,0,180);
}
/*通过为ActionListener接口要求的actionPerformed方法编写代码,可
* 以控制鼠标按键被单击时程序的行为。当鼠标被单击时,该方法自动发送一个
* ActionEvent对象。ActionEvent类包含一个名为getSource的方法,
* 该方法可以返回被单击对象的名称
* */
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == happyButton)
{
isHappy = true;
repaint();
}
if(e.getSource() == sadButton)
{
isHappy = false;
repaint();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: