Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1331566
  • 博文数量: 131
  • 博客积分: 9950
  • 博客等级: 中将
  • 技术积分: 1492
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-05 18:32
文章分类

全部博文(131)

文章存档

2008年(3)

2007年(37)

2006年(91)

我的朋友

分类: Java

2007-07-05 02:25:46

import java.awt.*;
import java.awt.event.*;

class 圆 extends Panel implements ActionListener{//负责计算圆的面积{
    double r ,area;
    TextField 半径=null;
    TextField 结果=null;
    Button b = null;
    
    圆(){
        半径 = new TextField(10);
        结果 = new TextField(10);
        b = new Button("确定");
        add(new Label("输入半径"));
        add(半径);
        add(new Label("面积是"));
        add(结果);
        add(b);
        b.addActionListener(this);
        }
    public void actionPerformed(ActionEvent e){
        try{
            r=Double.parseDouble(半径.getText());
            area = Math.PI*r*r;
            结果.setText(""+area);
            }catch(Exception ee){
                半径.setText("请输入数字字符");
                }
        }
    }
    class 三角形 extends Panel implements ActionListener{
        double a =0,b=0,c=0,area;
        TextField bian_a = new TextField(6),
                  bian_b = new TextField(6),
                  bian_c = new TextField(6),
                  结果 = new TextField(24);
        Button button = new Button("确定");
        三角形(){
            add(new Label("请输入三角形边的长度"));
            add(bian_a);add(bian_b);add(bian_c);
            add(new Label("面积是"));
            add(结果);add(button);
            button.addActionListener(this);
            }
        public void actionPerformed(ActionEvent e){
            try{
                a = Double.parseDouble(bian_a.getText());
                b = Double.parseDouble(bian_b.getText());
                c = Double.parseDouble(bian_c.getText());
                if(a+b>c&&a+c>b&&b+c>a){
                    double p = (a+b+c)/2;
                    area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
                    结果.setText(""+area);
                    }
                else{
                    结果.setText("你输入的数字不能形成三角形");
                    }
                }catch(Exception ee){
                    结果.setText("请输入数字字符");
                    }
            }
        }
       
    class Win extends Frame implements ActionListener{
        MenuBar bar = null; Menu menu = null;
        MenuItem item1,item2;
        圆 circle;
        三角形 trangle;
        Win (){
            bar = new MenuBar();
            menu = new Menu("选择");
            item1 = new MenuItem("圆的面积计算");
            item2 = new MenuItem("三角形的面积计算");
            menu.add(item1);menu.add(item2);
            bar.add(menu);
            setMenuBar(bar);
            circle = new 圆();
            trangle = new 三角形();
            item1.addActionListener(this);
            item2.addActionListener(this);
            setVisible(true);
            setBounds(100,120,100,200);
            }
        public void actionPerformed(ActionEvent e){
            if(e.getSource()==item1){
                removeAll();
                add(circle,"Center");
                validate();
                }
            else if(e.getSource()==item2){
                removeAll();
                add(trangle,"Center");
                validate();
                }
            }
        }
       
        public class Test43 {
            public static void main(String args[]){
                Win win = new Win();
                win.setBounds(100,100,200,100);
                win.setVisible(true);
                win.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e){
                        System.exit(0);
                        }
                    });
                }
            }


1.
r=Double.parseDouble(半径.getText());
此处的Double的首字母必须要大写
2.
MenuBar bar = null; Menu menu = null;
MenuBar(菜单条),java.awt包中的Menubar类是负责创建菜单条的,即MenuBar的一个实例就是一个菜单条。Frame类中有个将菜单条放置到窗口的方法:setMenuBar(MenuBar bar);该方法将菜单条添加到窗口顶端,需要注意的是,只能向窗口中添加一个菜单条。Menu(菜单),java.awt包中的Menu类是负责创建菜单的,即Menu类的一个实例就是一个菜单。Menu类的主要方法有以下几种:
Menu()建立一个空标题的菜单
Menu(String s)建立一个指定的标题菜单,标题由参数s确定。
public void add(MenuItem item)向菜单增加由参数item指定的菜单选项对象
public MenuItem getItem(int n)得到指定索引处的菜单选项
public int getItemCount()得到菜单选项的数目
public void insert(MenuItem item,int n)在菜单指定位置插入菜单选项
public void remove(int n)删除菜单指定位置的菜单选项
public void removeAll()删除菜单的所有选项
3.MenuItem(菜单项)
java.awt包的MenuItem是Menu的父类,该类是负责创建菜单项的,即MenuItem的一个实例就是一个菜单项。菜单项将被放在菜单项里。MenuItem类的主要方法有以下几种:
MenuItem()构建无标题菜单项
MenuItem(String s)构造有标题的菜单项
public String getLabel()得到菜单项的名字
public void setEnabled(boolean b)设置当前菜单项是否被选中
public void addActionListener(ActionListener)向菜单项增加监视器,从菜单项接受行动事件(单击某个菜单项)。
4.
结果.setText(""+area);
设置文本内容的时候要特别注意文本内容不能直接设置为某个类的对象,如果上面的程序改为
结果.setText(area);那么程序就会报错。
5.
area = Math.PI*r*r
PI是Math库的一个常量,如果要调用它的话就要指名它的位置---Math
6.
menu.add(item1);menu.add(item2);
    bar.add(menu);
    setMenuBar(bar);

上面的程序的意思就是把菜单项的对象引用item1,item2添加到菜单Menu的引用menu中去,再把菜单Menu的引用添加到菜单条MenuBar的对象引用bar中去,最后把菜单条的对象引用添加到窗口的顶端。
7.
add(circle,"Center");
添加组件circle,circle是圆的对象引用,圆类则是继承了面板类Panel。所以添加的是画布组件。我有点不明白后面的字符串常量"Center"就是是什么意思。我认为这不需要,是在是多此一举。
8.在类Win中有
setBounds(100,120,100,200);主类中有 win.setBounds(100,100,200,100);个人觉得这好像代码重复了。
9.
win.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e){
                        System.exit(0);
                        }
                    });
WindowListener是对窗口进行监听,上面的程序的功能就是关闭程序。下次再着重讨论。
10.总结
该程序分为四大块:1.圆类,主要是实现对圆的面积计算的程序实现和对面板的排序2.三角形类,主要是对判断是否是三角形和对三角形面积计算的程序实现和对其进行面板的排序3.Win类主要是对窗口的程序实现,在窗口中通过菜单项的选择可以选择是要计算圆的面积还是三角形的面积4.主类,初始化程序

阅读(2241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~