常用AWT组件-2

    技术2024-11-24  20

    1)      Canvas编程实例

    组件类:

    package testStopWatch;

    import java.awt.*;

    import java.awt.event.*;

    import java.util.Date;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

     

    public class StopWatch extends Canvas implements Runnable  {

        long startTime=0;//初始时间

        long endTime=0;  //结束时间

        boolean bStart=false;//控制线程的变量

        public StopWatch()   //定义一个构造函数,用来注册鼠标事件

        {

           enableEvents(AWTEvent.MOUSE_EVENT_MASK);

        }

        protected void processMouseEvent(MouseEvent e)//重写鼠标事件的方法

        {

           if (e.getID()==MouseEvent.MOUSE_PRESSED) {//判断事件的id是不是鼠标按下事件

               startTime=endTime=System.currentTimeMillis();//使时间归零

               repaint();//重新绘制时间

               new Thread(this).start();//开始重绘组件的线程

               bStart=true;//开锁线程内循环

           }else if (e.getID()==MouseEvent.MOUSE_RELEASED) {//判断事件的id是不是鼠标释放事件

               //endTime=System.currentTimeMillis();

               repaint();//重新绘制时间

               bStart=false;锁住线程内循环

           }

        }

        public void paint(Graphics g)

        {

           SimpleDateFormat sdf=new SimpleDateFormat("hh:mm:ss");//设置时间转化格式

           Date date1=null;//设置一个时间

           try {

               date1 = sdf.parse("00:00:00");//设置时间初始值

           } catch (ParseException e) {

               e.printStackTrace();

           }

           date1.setTime(date1.getTime()+endTime-startTime);//获得当前时间

           String strTime=sdf.format(date1);//设置输出时间的格式

           g.fill3DRect(0, 0, 78, 28,false);//设置组件的背景色为黑色

           g.setColor(Color.WHITE);//设置字体为白色

           g.drawString(strTime, 10, 20);//绘制时间

        }

        public void run() {

           while (bStart) {

               try {

                  Thread.sleep(500);//500ms刷新一次

               } catch (InterruptedException e) {

                  e.printStackTrace();

               }

               endTime=System.currentTimeMillis();//重新设置结束时间

               repaint();//重绘组件

           }

          

        }

    }

    主程序:

    this.add(new StopWatch());//在窗口中添加组件

    问题:不能显示00:00:00,显示的都是12:0000

    2)菜单

    主程序:

     

    package testMenuBar;

     

    import java.awt.*;

    import java.awt.event.*;

    public class TestMenuBar extends Frame {

        MenuBar menuBar=new MenuBar();

       

        Menu fileM=new Menu("File");

        Menu editM=new Menu("Edit");

        Menu toolsM=new Menu("Tools");

        Menu helpM=new Menu("Help");

       

        MenuItem fileM1=new MenuItem("New");

        MenuItem fileM2=new MenuItem("Open");

        MenuItem fileM3=new MenuItem("Save");

        Menu fileM4=new Menu("Print");

       

        MenuItem printM1=new MenuItem("preview");

        MenuItem printM2=new MenuItem("setting");

       

        CheckboxMenuItem fileM5=new CheckboxMenuItem("Quit",true);

     

        public TestMenuBar()//添加构造方法

        {

           //添加菜单栏的项

           menuBar.add(fileM);

           menuBar.add(editM);

           menuBar.add(toolsM);

           menuBar.add(helpM);

           //添加第一个菜单的子项

           fileM.add(fileM1);

           fileM.add(fileM2);

           fileM.add(fileM3);

           fileM.add(fileM4);

           fileM.addSeparator();

           fileM.add(fileM5);

            //添加第四个菜单的子项

           fileM4.add(printM1);

           fileM4.add(printM2);

           //给菜单项添加监听器

           MenuListener m1=new MenuListener();

           printM1.addActionListener(m1);

           printM2.addActionListener(m1);

           //把菜单添加到窗口中

           this.setMenuBar(menuBar);

          

           addWindowListener(new WindowAdapter(){//注册窗口适配器

               public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                  dispose();     //释放该窗口

                  System.exit(0);//停止程序的运行

               }

     

           });

        }

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           System.out.println("starting TestStopWatch..");

           TestMenuBar t=new TestMenuBar();

           t.setSize(400, 400);//设置窗口的大小

           t.setTitle("TestMyButton");

           t.setVisible(true);

        }

     

    }

    菜单监听器类:

    package testMenuBar;

     

    import java.awt.event.*;

    import java.awt.*;

     

    public class MenuListener implements ActionListener {

     

        public void actionPerformed(ActionEvent arg0) {

           // TODO Auto-generated method stub

           if (arg0.getActionCommand().equals("preview")) {//添加preview项的处理事件

               System.out.println("doing preview");

           }else if (arg0.getActionCommand().equals("setting")) {//添加setting项的处理事件

               System.out.println("doing setting");

           }

        }

     

    }

    3Dialog类实例

    子窗口类:

    package testDialog;

    import java.awt.*;

    import java.awt.event.*;

    //定义一个对话框类

    public class MyDialog extends Dialog {

        private TextField tf=new TextField(10);//定义一个10字符长度的文本域

        private String strInfo=null;           //定义一个成员变量

        public MyDialog(Frame owner, String title,boolean modal) {//定义构造函数

           super(owner, title, modal);

           setBounds(0, 0, 200, 150);//设置窗口左上角的坐标和窗口的大小

           Button b1=new Button("应用");//设置应用按钮

            Button b2=new Button("确定");//设置确定按钮

          

           this.add(tf,"North");//把文本框设置在上边

           this.add(b1,"Center");//b1按钮设置在中间

           this.add(b2,"East");//b2按钮设置在右侧

          

           if (this.isModal()) {//如果当前窗口是模式窗口则应用窗口是无效的

               b1.setEnabled(false);

           }

           b1.addActionListener(new ActionListener(){//注册应用按钮的监听器

     

               public void actionPerformed(ActionEvent arg0) {

                  ((TestDialog)getOwner()).setInfo(tf.getText());//把当前窗口的文本框信息赋值给调用窗口          

               }

              

           });

           b2.addActionListener(new ActionListener(){

     

               public void actionPerformed(ActionEvent arg0) {

                  if (isModal()) {//如果是模式窗口,把信息传递给成员变量

                      strInfo=tf.getText();

                  }else {

                      //如果是非模式窗口,则直接把值传递给父窗口

                      ((TestDialog)getOwner()).setInfo(tf.getText());

                  }

                  //释放该窗口

                  dispose();

                 

               }

              

           });

        }

        public void setInfo(String strInfo)

        {

           //设置字符串信息

           tf.setText(strInfo);

        }

        public String getInfo()

        {

           //返回字符串信息

           return strInfo;

        }

     

    }

    主类:

    package testDialog;

     

    import java.awt.*;

    import java.awt.event.*;

    public class TestDialog extends Frame {

        private TextField tf=new TextField(10);

        public TestDialog()//添加构造方法

        {

           Button b1=new Button("打开模化对话框");

           Button b2=new Button("打开非模态对话框");

           add(tf,"North");

           add(b1,"Center");

           add(b2,"East");

          

           b1.addActionListener(new ActionListener(){//为模式窗口按钮注册监听器

     

               public void actionPerformed(ActionEvent arg0) {

                  MyDialog dlg=new MyDialog(TestDialog.this,"modal dialog",true);

                  dlg.setInfo(tf.getText());//把主窗口的信息传递给模式窗口

                  dlg.setVisible(true);

                  tf.setText(dlg.getInfo());//设置模式窗口文本框的信息

               }

              

           });

           b2.addActionListener(new ActionListener(){

     

               public void actionPerformed(ActionEvent arg0) {

                  MyDialog dlg=new MyDialog(TestDialog.this,"modal dialog",false);

                  dlg.setInfo(tf.getText());//获得非模式窗口的文本信息

                  dlg.setVisible(true);

               }

              

           });

           addWindowListener(new WindowAdapter(){//注册窗口适配器

               public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                  dispose();     //释放该窗口

                  System.exit(0);//停止程序的运行

               }

     

           });

        }

        public void setInfo(String strInfo)

        {

           tf.setText(strInfo);

        }

        public static void main(String[] args) {

            // TODO Auto-generated method stub

           System.out.println("starting TestStopWatch..");

           TestDialog t=new TestDialog();

           t.setSize(400, 400);//设置窗口的大小

           t.setTitle("TestMyButton");

           t.setVisible(true);

        }

     

    }

    4checkbox类实例

    package testCheckbox;

     

    import java.awt.*;

    import java.awt.event.*;

    public class TestCheckbox extends Frame {

        Checkbox cb1=new Checkbox("你喜欢我吗",true);

       

        CheckboxGroup gb=new CheckboxGroup();

        Checkbox cb2=new Checkbox("喜欢",true,gb);

        Checkbox cb3=new Checkbox("不喜欢",false,gb);

     

        CbItemListener cbi=new CbItemListener();

     

        class CbItemListener implements ItemListener

        {

     

           public void itemStateChanged(ItemEvent arg0) {

               Checkbox cb=(Checkbox)arg0.getItemSelectable();

               if (cb.getLabel().equals("你喜欢我吗")) {

                  if (cb.getState()) {

                      System.out.println("我很高兴");

                  }else {

                      System.out.println("我很伤心");

                  }

               }/*else if (cb.getLabel().equals("喜欢")) {

                  if (arg0.getStateChange()==ItemEvent.SELECTED) {

                      System.out.println("我爱你");

                  }else {

                      System.out.println("我也不喜欢你");

                   }

                     

               }*/else {

                  Checkbox cbx=gb.getSelectedCheckbox();

                  if (cbx!=null) {

                      System.out.println(cbx.getLabel());

                  }

               }

              

           }

          

        }

        public TestCheckbox()//添加构造方法

        {

           FlowLayout f1=new FlowLayout();

           setLayout(f1);

           add(cb1);

           add(cb2);

           add(cb3);

          

           cb1.addItemListener(cbi);

           cb2.addItemListener(cbi);

           cb3.addItemListener(cbi);

           addWindowListener(new WindowAdapter(){//注册窗口适配器

               public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                  dispose();     //释放该窗口

                  System.exit(0);//停止程序的运行

               }

     

           });

        }

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           System.out.println("starting TestStopWatch..");

           TestCheckbox t=new TestCheckbox();

           t.setSize(400, 400);//设置窗口的大小

           t.setTitle("TestMyButton");

           t.setVisible(true);

        }

     

    }

    5Choice类实例

    package testCheckbox;

     

    import java.awt.*;

    import java.awt.event.*;

    public class TestCheckbox extends Frame {

        Checkbox cb1=new Checkbox("你喜欢我吗",true);

       

        CheckboxGroup gb=new CheckboxGroup();

        Checkbox cb2=new Checkbox("喜欢",true,gb);

        Checkbox cb3=new Checkbox("不喜欢",false,gb);

     

        CbItemListener cbi=new CbItemListener();

       

        Choice ch=new Choice();

        class ChItemListener implements ItemListener

        {

     

           public void itemStateChanged(ItemEvent arg0) {

               System.out.println(arg0.getItem());

           }

          

        }

       

     

        class CbItemListener implements ItemListener

        {

     

           public void itemStateChanged(ItemEvent arg0) {

               Checkbox cb=(Checkbox)arg0.getItemSelectable();

               if (cb.getLabel().equals("你喜欢我吗")) {

                  if (cb.getState()) {

                      System.out.println("我很高兴");

                  }else {

                      System.out.println("我很伤心");

                  }

               }/*else if (cb.getLabel().equals("喜欢")) {

                  if (arg0.getStateChange()==ItemEvent.SELECTED) {

                      System.out.println("我爱你");

                  }else {

                      System.out.println("我也不喜欢你");

                  }

                     

               }*/else {

                  Checkbox cbx=gb.getSelectedCheckbox();

                  if (cbx!=null) {

                      System.out.println(cbx.getLabel());

                  }

               }

              

           }

          

        }

        public TestCheckbox()//添加构造方法

        {

           FlowLayout f1=new FlowLayout();

           setLayout(f1);

           add(cb1);

           add(cb2);

           add(cb3);

          

           cb1.addItemListener(cbi);

           cb2.addItemListener(cbi);

           cb3.addItemListener(cbi);

          

           ch.add("choice1");

           ch.add("choice2");

           ch.add("choice3");

           add(ch);

           ch.addItemListener(new ChItemListener());

           addWindowListener(new WindowAdapter(){//注册窗口适配器

               public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                  dispose();     //释放该窗口

                  System.exit(0);//停止程序的运行

               }

     

           });

        }

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           System.out.println("starting TestStopWatch..");

           TestCheckbox t=new TestCheckbox();

           t.setSize(400, 400);//设置窗口的大小

           t.setTitle("TestMyButton");

           t.setVisible(true);

        }

     

    }

    6PanelScrollPanel

    package testPane;

     

    import java.awt.*;

    import java.awt.event.*;

    public class TestPane extends Frame {

     

        public TestPane()//添加构造方法

        {

           TextArea ta=new TextArea("",10,50,TextArea.SCROLLBARS_NONE);

           ScrollPane sp=new ScrollPane();

           sp.add(ta);

           add(sp);

           addWindowListener(new WindowAdapter(){//注册窗口适配器

               public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                  dispose();     //释放该窗口

                  System.exit(0);//停止程序的运行

               }

     

           });

        }

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           System.out.println("starting TestStopWatch..");

           TestPane t=new TestPane();

           t.setSize(200, 200);//设置窗口的大小

           t.setTitle("TestMyButton");

           t.setVisible(true);

        }

     

    }

     

     

     

     

    最新回复(0)