黑马程序员-java 基础之GUI

--------------------- android培训java培训、java学习型技术博客、期待与您交流! -------------------

GUI

概述:Graphical User Interface图形化用户接口,用图形的方式,来显示计算机操作的界面,比起Dos命令操作这样更加方便更加直观

JavaGUI提供的对象都存在java.Awtjava.Swing两个包中

java.Awt需要调用本地系统方法实现功能,属于重量级控件

java.SwingAwt的基础上,建立了一套图形界面系统,其中提供了更多的组件,而且完全由java实现。增强了移植性,属于轻量级控件

组件继承关系图

Countainer:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件

Countainer常用子类:Window Panel(面板,不能单独存在,当窗口存在多种布局方式时,可以将其加入,设置布局方式,将组件添加至其中。)

布局管理器

概述:容器中的组件的排放方式,就是布局。

常见布局管理器

FlowLayout

流式布局管理器,从左到右的顺序排列,Panel默认的布局管理器

BorderLayout

边界布局管理器,排列方式东、南、西、北、中,Frame默认的布局管理器,只有一个组件时默认为整个窗口

GridLayout

网格布局管理器,排列方式为规则的矩形

GridBagLayout

网格包布局管理器排列方式为非规则的矩形

GradLayout

卡片布局管理器,排列方式为选项卡。

窗体创建过程

步骤

1 创建Frame窗体

2对窗体属性进行基本设置

3定义组件

4将组件添加到窗口中

5让窗口显示

代码示例

class FrameDemo

{

       public static void main(String[] args)

{

       Frame f=new Frame("my window")//定义窗口,初始化窗体名

       f.setSize(500,400);//设置窗口大小

       f.setLocation(300,200);//设置窗口显示位置

       //f.setBounds(500,200,300,200);//设置窗口大小和窗口显示位置

       f.setLayout(new FlowLayout());

       Button b=new Button("my button");//定义组件,初始化组件名

       f.add(b);//添加组件到窗口

       f.setVisible(true)//显示窗口,flase为不显示。

}

}

事件监听机制

组成:

       事件源

       事件

       监听器

       事件处理方式

事件监听流程图解:

事件监听机制的特点

事件源:就是awt包或swing包中的那些图形界面组件

事件:每一个事件源都有自己特有的对应事件和共性事件

监听器:将可以触发某一个事件的动作(不只一个)都已经封装到了监听器中

以上三者在java中都已经定义好了,直接获取其对象即可。我们所要做的就是对产生的动作进行处理。

事件监听步骤

1确定事件源(容器或窗口)

2通过事件源对象的addxxxLister()方法将监听器注册到该事件源上。在方法中接收xxxListerxxxAdapter的子类对象,一般用匿名内部类来表示。在覆盖方法时,方法的参数一般都是xxxEvent类型的变量接收

3 明确事件,并对事件进行处理。

事件触发后会把事件打包成对象传递给复写方法中的参数

若实现WindowListenner接口需要实现其中的七个方法,但只用到其中的一个关闭动作,其他动作未用到,但却必须重写全部,这样做较为麻烦,这时我们我们可以选择继承WindowAdapter,覆盖需要的方法即可。WindowAdapterWindowListenner的子类,该类已经实现接口中所有方法

 

代码示例关闭窗口动作

class FrameDemo1

{

       public static void main(String[] args)

{

              Frame f=new Frame("my window")//定义窗口,初始化窗体名

       f.setBounds(500,200,300,200);//设置窗口大小和窗口显示位置

              f.addWindowListerner(new WindowAdpater()

{

       public void windowClosing(WindowEvent e)

       {

              System.exit(0);

}

})

 

}

}

通过按钮关闭窗口退出

代码示例

import java.awt.*;

import java.awt.event.*;

 

class FrameDemo2

{

       public static void main(String[] args)

       {

                     Frame f=new Frame("my window");//定义窗口,初始化窗体名

                     f.setSize(500,400);//设置窗口大小

                     f.setLocation(300,200);//设置窗口显示位置

                     f.setLayout(new FlowLayout());

                     Button b=new Button("退出");//定义组件,初始化组件名

                     f.add(b);//添加组件到窗口

      

                     b.addActionListener(new ActionListener()

                     {

                     public void actionPerformed(ActionEvent e)

                     {

                            System.out.println("按钮退出");

                            System.exit(0);

                     }

                     });

                     f.setVisible(true);

}

}

共性事件

鼠标事件和键盘事件

代码示例

import java.awt.*;

import java.awt.event.*;

 

public class MouseAndKeyDemo

{

       public static void main(String[] args)

       {

              new MouseAndKeyDemo();

       }

 

}

class MouseAndKeyDemo

 {

      

              private Frame f;

              //private TextField tf;

              private Button but;

             

              public MouseAndKeyDemo()

              {

                     init();

                    

              }

 

 

              private void init()

              {

                    

                     f = new Frame("演示鼠标和键盘监听");

                     f.setBounds(400,200,500,400);

                     f.setLayout(new FlowLayout());

                    

                     but = new Button("一个按钮");

                     f.add(but);

                    

                     myEvent();

                    

                    

                     f.setVisible(true);

                    

              }

 

 

              private void myEvent()

              {

                    

                     //给按钮添加键盘监听。

                     but.addKeyListener(new KeyAdapter()

                     {     

                     public void keyPressed(KeyEvent e)

                     {

                                                                              System.out.println("keyrun..."+KeyEvent.getKeyText

(e.getKeyCode())+"::::"+e.getKeyCode());

                                         

                     }            

                                                       

                     });

                    

                    

                    

                     f.addWindowListener(new WindowAdapter()

                     {

 

                     public void windowClosing(WindowEvent e) {

                                  

                            System.exit(0);

                     }

                           

                     });

                    

                     but.addActionListener(new ActionListener()

                     {

                           

                            public void actionPerformed(ActionEvent e)

                            {

                                   System.out.println("action run.....");

                            }

                     });

                    

                    

                     //在按钮上添加一个鼠标监听.

                     but.addMouseListener(new MouseAdapter()

{

 

                            private int count = 1;

                           

                            public void mouseClicked(MouseEvent e)

{

                                          if(e.getClickCount()==2)

{

                                                 System.out.println("mouse click..."+count++);      

}

}

                           

                     });

             

                           

             

              //在按钮上添加一个鼠标监听.

              but.addMouseListener(new MouseAdapter()

{

 

                     private int count = 1;

                     public void mouseEntered(MouseEvent e) {

                           

//                   System.out.println("mouse enter..."+count++);

                           

                                                

                     }

                            public void mouseClicked(MouseEvent e) {

                           

                            if(e.getClickCount()==2)

                            System.out.println("mouse click..."+count++);

//                          System.out.println(e);

                     }

                    

              });

       }

}

 

注意:鼠标监听机制先执行只有鼠标活动时才会执行,活动监听机制后执行

活动监听机制只要按钮活动就会执行如鼠标键盘

练习-在文本框中输入目录,点击Button按钮,将该目录中的文件与文件夹名称列在下面的文本区域中

代码示例

import java.awt.*;

import java.awt.event.*;

import java.text.*;

import java.io.*;

public class Test11

{

        public static void main(String[] args)

              {

                     new MyWindow();    

              }

 

}

 class MyWindow

 {

        private Frame f;

        private TextField tf;

        private Button but;

        private TextArea ta;

        MyWindow()

        {

               init();

        }

        public void init()

        {

               f = new Frame();

               f.setBounds(300, 100, 600, 500);

               f.setLayout(new FlowLayout());

               tf= new TextField(50);

               ta= new TextArea(30,70);

               but=new Button("转到");

               f.add(tf);

               f.add(but);

               f.add(ta);

               myEvent();

               f.setVisible(true);

        }

        private void myEvent()

        {

              but.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                            String dirpath=tf.getText();

                            //ta.setText(str);

                            File fl=new File(dirpath);

                            if(fl.exists() && fl.isDirectory() )

                            {

                                   ta.setText("");

                                   String[] names=fl.list();

                                   for(String name: names)

                                   {

                                          ta.append(name+"\r\n");

                                   }

                            }

                            tf.setText("");

                    

                     }

              });

              f.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     {

                            System.exit(0);

                     }

              });

             

             

        }

 }

对话框

Dialog

当操作失误时,需要出现提示错误信息的对话框,

代码示例

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.text.*;

public class Test11

{

        public static void main(String[] args)

              {

                     new MyWindow(); 

              }

 

}

 class MyWindow

 {

        private Frame f;

        private TextField tf;

        private Button but;

        private TextArea ta;

        private Dialog d;

        private Label lab;

        private Button but1;

        MyWindow()

        {

               init();

        }

        public void init()

        {

               f = new Frame();

               f.setBounds(300, 100, 600, 500);

               f.setLayout(new FlowLayout());

               tf= new TextField(50);

               ta= new TextArea(30,70);

               but=new Button("转到");

               f.add(tf);

               f.add(but);

               f.add(ta);

               d = new Dialog(f,"提示信息-出错了",true);//模式为true时,d不处理无法操作f

               d.setBounds(200, 200, 300, 250);

               d.setLayout(new FlowLayout());

               lab=new Label();

               but1=new Button("确定");

               d.add(lab);

               d.add(but1);

               myEvent();

               f.setVisible(true);

        }

        private void showfl()

        {

               String dirpath=tf.getText();

                     //ta.setText(str);

                     File fl=new File(dirpath);

                     if(fl.exists() && fl.isDirectory() )

                     {

                            ta.setText("");

                            String[] names=fl.list();

                            for(String name: names)

                            {

                                   ta.append(name+"\r\n");

                            }

                     }

                     else

                     {

                            String str ="输入信息错误"+fl;

                            lab.setText(str);

                            d.setVisible(true);

                     }

                     tf.setText("");

        }

        private void myEvent()

        {

              but.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                     /*String dirpath=tf.getText();

                            //ta.setText(str);

                            File fl=new File(dirpath);

                            if(fl.exists() && fl.isDirectory() )

                            {

                                   ta.setText("");

                                   String[] names=fl.list();

                                   for(String name: names)

                                   {

                                          ta.append(name+"\r\n");

                                   }

                            }

                            else

                            {

                                   String str ="输入信息错误"+fl;

                                   lab.setText(str);

                                   d.setVisible(true);

                            }

                            tf.setText("");*/

                            showfl();

                     }

              });

              tf.addKeyListener(new KeyAdapter()

              {

                     public void KeyPressed(KeyEvent e)

                     {

                            if(e.getKeyCode()==KeyEvent.VK_ENTER)

                                   showfl();

                                  

                     }

              });

              f.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     {

                            System.exit(0);

                     }

              });

              d.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     {

                            d.setVisible(false);

                     }

              });

             

              but1.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                            d.setVisible(false);

                     }

              });

             

        }

 }

菜单

菜单继承关系

菜单应用代码示例

import java.awt.*;

import java.awt.event.*;

public class Test12

{

       public static void main(String[] args)

       {

              new MyMenu();     

       }

 

}

class MyMenu

{

       private Frame f;

       private MenuBar mb;

       private Menu m;

       private Menu m1;

       private MenuItem mit;

       private MenuItem mit1;

       MyMenu()

       {

              init();

       }

       public void init()

       {

               f = new Frame();

               f.setBounds(300, 100, 600, 500);

               f.setLayout(new FlowLayout());

               mb= new MenuBar();

               m = new Menu("文件");

               m1 = new Menu("编辑");

               mit=new MenuItem("打开");

               mit1=new MenuItem("删除");

               m1.add(mit1);

               mb.add(m);

               m.add(m1);

               //mb.add(m1);

               m.add(mit);

               f.setMenuBar(mb);

               myEvent();

               f.setVisible(true);

       }

       private void myEvent()

       {

              f.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     {

                            System.exit(0);

                     }

              });

       }

      

}

小练习-文件打开保存代码示例

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class Test12

{

       public static void main(String[] args)

       {

              new MyMenu();     

       }

 

}

class MyMenu

{

       private Frame f;

       private MenuBar mb;

       private Menu m;

       private Menu m1;

       private MenuItem mit;

       private MenuItem mit1;

       private MenuItem mit2;

       private MenuItem mit3;

       private FileDialog save;

       private FileDialog open;

       private TextArea ta;

       private File file;

       MyMenu()

       {

              init();

       }

       public void init()

       {

               f = new Frame();

               f.setBounds(300, 100, 600, 500);

              // f.setLayout(new FlowLayout());

               mb= new MenuBar();

               m = new Menu("文件");

               m1 = new Menu("编辑");

               mit=new MenuItem("打开");

               mit1=new MenuItem("保存");

               mit2=new MenuItem("退出");

               mit3=new MenuItem("删除");

               mb.add(m);

               mb.add(m1);

               m.add(mit);

               m.add(mit1);

               m.add(mit2);

               m1.add(mit3);

               f.setMenuBar(mb);

               ta= new TextArea();

               f.add(ta);

               open=new FileDialog(f,"打开",FileDialog.LOAD);

               save=new FileDialog(f,"保存",FileDialog.SAVE);

               myEvent();

               f.setVisible(true);

               

       }

       private void myEvent()

       {

              mit2.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                            System.exit(0);

                     }

              });

              mit.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                            open.setVisible(true);

                            String dirpath=open.getDirectory();

                            String fileName=open.getFile();

                            if(dirpath==null|| fileName==null)

                                   return;

                            ta.setText("");

                             file=new File(dirpath,fileName);

                            try

                            {

                                   BufferedReader bufr=new BufferedReader(new FileReader(file));

                                   String lin=null;

                                   while((lin=bufr.readLine())!=null)

                                   {

                                          ta.append(lin+"\r\n");

                                   }

                                   bufr.close();

                            }

                            catch(IOException ex)

                            {

                                   throw new RuntimeException("打开失败");

                            }

                           

                     }

              });

              mit1.addActionListener(new ActionListener()

              {

                     public void actionPerformed(ActionEvent e)

                     {

                            if(file==null)

                            {

                                   save.setVisible(true);

                                   String dirpath=save.getDirectory();

                                   String fileName=save.getFile();

                                   if(dirpath==null|| fileName==null)

                                          return;

                                   file=new File(dirpath,fileName);

                            }

                            try

                            {

                                   BufferedWriter bufw=new BufferedWriter(new FileWriter(file));

                                   String te=ta.getText();

                                   bufw.write(te);

                                   bufw.flush();

                                   bufw.close();

                                  

                            }

                            catch(IOException ex)

                            {

                                   throw new RuntimeException("保存失败");

                            }

                           

                     }

              });

              f.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     {

                            System.exit(0);

                     }

              });

             

       }

      

}

--------------------- android培训java培训、java学习型技术博客、期待与您交流! -------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值