首页 > 代码库 > 黑马程序员_GUI

黑马程序员_GUI

     

                              GUI

java.awt 包     java.swing包

Java将图形界面,用包中的类,完成图形化界面的开发

  awt包中类必须依赖操作系统,重量级组件

  swing包中类基于awt的功能,由Java代码完全实现的图形界面,不依赖操作系统,轻量级组件

                  

                              Frame类 制作窗体

Frame类中的方法:

    不带标题的窗口:Frame()

    带有标题的窗口:Frame(窗口名)

    让窗体显示的方法 setVisible(boolean )

    设置窗体的大小 setSize(int width,int height)

    对窗体定位,父类的setLocation(width,height)

    设置尺寸和位置 setBounds(int x ,int y, int width,int height)

    设置窗体的背景色 setBackground(Color c)万物皆对象,颜色也是对象,封装到了Color类

    获取屏幕分辨率的方式 ToolKit实现,Toolkit中静态方法 getDeafultToolKit,返回其子类的对象。再调用Toolkit类的方法getScreenSize获取屏幕分辨率,返回       Dimension对象,这个对象的成员变量 width height就是屏幕的分辨率

      Toolkit.getDeafultToolkit().getScreenSize().width 

      setLoction((width-100)/2,(height-30)/2);

 

 

                                  布局管理器

FlowLayout

  上到下,左到右

BorderLayout  边界布局

  东、南、西、北、中

GridLayout  网格布局

  规则矩阵

GridLayout  不规则的网格布局

  不规则矩阵

CardLayout    卡片布局

  选项卡

 

                                描述按钮的类

      

1、 java.awt.Button

     构造方法:带有一个String类型的标签 Button(String lable )

 2、将按钮放在窗体上,使用的是窗体的方法 Frame类的add(按钮)

 3、随意放置,大小自定义调节的按钮

     取消布局管理器Frame类的setLayout(null)

     如果取消了布局管理器,组件,必须定义位置和尺寸,否则不显示 setBounds(x,y,width,height)

 

 

                              事件监听机制

组成:

    事件源:就是用户可以操作的组件。按钮,窗体,文本框

    事件:鼠标事件,键盘事件,窗体事件

    监听器:内置于事件源上的一种监听机制。监听鼠标事件,只要有鼠标的动作,就会被监听器捕获

    事件处理:一旦监听器监听到了动作,就调用响应的函数,进行事件的处理

 

                                  适配器设计模式

 

1、  类适配器类,作用实现接口,重写接口中的全部抽象方法,但是重写后方法的主体为空。我们开发者不需要直接实现接口,只需继承适配器了,重写想要的方法就可以了

   如 实现WindowListener接口 的窗口适配器WindowAdapter类

2、写事件监听器

  标准格式:

      事件源.addXXXListener(new XXXAdapter(){

             public void 方法名(XXXEvent e){

            }    

          });

       xxx:代表事件

  

     f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e){                System.out.println(e);                System.exit(0);            }        });

3、鼠标事件

 1 /* 2  * 鼠标事件 3  */ 4 import java.awt.*; 5 import java.awt.event.*; 6  7 public class FrameDemo3 { 8     public static void main(String[] args) { 9         Frame f = new Frame("鼠标事件");10         f.setBounds(200, 100, 500, 400);11         f.setLayout(null);12 13         f.setVisible(true);14         Button but = new Button("确定");15         but.setBounds(100, 50, 50, 30);16         f.add(but);17         // 对事件源按钮,添加鼠标事件18         but.addMouseListener(new MouseAdapter() {19             // 重写鼠标的点击事件20             public void mouseClicked(MouseEvent e) {21                 // System.out.println(e);22                 if (e.getClickCount() == 12)23                     System.out.println("点击了按钮");24             }25             //鼠标进入事件源26             public void mouseEntered(MouseEvent e) {27                     System.out.println("鼠标进入");28             }29             //鼠标离开事件源30             public void mouseExited(MouseEvent e) {31                     System.out.println("鼠标离开");32             }33 34         });35 36     }37 }

 

                                                                            

 4、键盘事件

    KeyEvent类中的方法:

      int getKeycode()  int getKeyChar() 

      KeyEvent类中的静态常量封装了键盘上所对应的码值。这些常量以“VK_键名”的形式组成。如:KeyEvent.VK_0代表键盘上输入0

    KeyEvent继承的父类方法:

      consume()  阻止非法数据的输入

      boolean isXXXDown()  判断是否按下了某个键

    TextField类的方法:

      setEchochar() 以“*”显示按下的键

5、获取键盘的输入

 

 1 import java.awt.*; 2 import java.awt.event.*; 3  4 public class KeyInput { 5     public static void main(String[] args){ 6         Frame frame=new Frame("键盘输入"); 7         frame.setBounds(500,299, 600, 500); 8         frame.setBackground(new Color(202,232,237)); 9         frame.setLayout(null);10         frame.setVisible(true);11         12         TextField tf=new TextField();13         tf.setBounds(20,40, 400, 30);14         frame.add(tf);15         tf.setEchoChar(‘*‘);16         tf.addKeyListener(new KeyAdapter() {17             public void keyPressed(KeyEvent e){18                 int code =e.getKeyCode();19                 char c = e.getKeyChar();20                 System.out.println(c+"");21                 if(e.isControlDown()&&code==KeyEvent.VK_ENTER){22                     System.out.println("组合键");23                 }24             }25         });26     }27 }

 

 6、文件列表的摸拟

import java.awt.*;import java.awt.event.*;import java.io.File;public class FileList {    //定义窗口    private Frame frame;    //定义单行文本    private TextField frame_tf;    // 跳转按钮    private Button frame_but;    //    多行文本    private TextArea frame_ta;    //    对话框    private Dialog dialog ;    //对话框的确定按钮    private Button dialog_but;//    对话框上的文本标签    private Label dialog_lbl;//    获取屏幕分辨率    private static final int WIDTH=Toolkit.getDefaultToolkit().getScreenSize().width;    private static final int HEIGHT=Toolkit.getDefaultToolkit().getScreenSize().height;            //文件列表的构造函数    public FileList(){//        初始化的函数        init();    }    private void init(){//        初始化窗口        frame=new Frame("文件列表");//        设置窗口的位置和大小        frame.setBounds((WIDTH-600)/2, (HEIGHT-500)/2, 600, 500);//        设置背景        frame.setBackground(new Color(202,232,237));//    清空布局        frame.setLayout(null);//        显示窗口        frame.setVisible(true);        //        初始化化单行文本        frame_tf=new TextField();//        设置单行文本的位置和大小        frame_tf.setBounds(20,40, 400, 30);//        将单行文本添加进窗口        frame.add(frame_tf);        //        初始化跳转按钮        frame_but=new Button("跳转");        frame_but.setBounds(440,40 ,70 ,30 );        frame.add(frame_but);        //        初始化多行文本        frame_ta=new TextArea();        frame_ta.setBounds(20,85, 550, 400);        frame.add(frame_ta);        //        初始化对话框        dialog=new Dialog(frame,"错误路径",true);        dialog.setBounds((WIDTH-600)/2, (HEIGHT-150)/2, 600, 150);        dialog.setLayout(null);        //        初始化按钮        dialog_but=new Button("确定");        dialog_but.setBounds(320, 90, 50, 25);        dialog.add(dialog_but);        //        处理事件        event();    }    //    事件的处理    private void event(){//    窗口的关闭        frame.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e){                System.exit(0);            }        });        //        按钮跳转        frame_but.addMouseListener(new MouseAdapter() {            public void mouseClicked(MouseEvent e){                getDir();            }        });        //        输入文本的键盘事件        frame_tf.addKeyListener(new KeyAdapter() {            public void keyPressed(KeyEvent e) {//            判断按下的是不是回车键                int code=e.getKeyCode();                if(code==KeyEvent.VK_ENTER)//                    遍历目录                    getDir();            }        });        //        定义对话框的关闭按钮        dialog.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e){                dialog.setVisible(false);            }        });        //        定义对话框上的确定按钮        dialog_but.addMouseListener(new MouseAdapter(){            public void mouseClicked(MouseEvent e){                dialog.setVisible(false);            }        });    }    //遍历目录    public void getDir(){//        获取目录的路径        String path=frame_tf.getText();        if(path==null || "".equals(path))                return ;//        将目录路径封装到File类中        File file=new File(path);//        判断路径是否存在        if(!file.exists()){//            初始化button            if(dialog_lbl==null){                dialog_lbl=new Label ("输入的路径:"+path+",有误");            }else                dialog_lbl.setText("输入的路径:"+path);                        dialog_lbl.setBounds(120, 50, 300, 25);            dialog.add(dialog_lbl);            dialog.setVisible(true);        }else{//            遍历目录//            追加到多行文本的时候,清空多行文本            frame_ta.setText("");//            返回封装路径下的全路径            File[] files=file.listFiles();            for(File f:files){                frame_ta.append(f+"\r\n");            }        }            }}

 

 

      

                                       菜单

 1、 MenuBar

      用窗体的setMenuBar方法设置MenuBar

      构造方法只有空参数的

      add(Menu)将菜单添加到菜单栏

   Menu

      构造方法,带有一个String标签的

      add(MenuItem)添加菜单条目到菜单中

   MenuItem

      构造方法,带有一个String标签的

      addActionListener()添加活动的事件监听

 2、模拟记事本

   窗体设置Bar,Bar添加MenuMenu添加MenuItem

  

  1 import java.awt.*;  2 import java.awt.event.*;  3 import java .io.*;  4 public class Note {  5     //定义屏幕分辨率  6     private static final int WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;  7     private static final int HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;  8     //定义窗体  9     private Frame frm; 10     //展示列表多行文本 11     private TextArea frm_ta; 12     //菜单栏MenuBar 13     private MenuBar bar ; 14     //菜单Menu 15     private Menu menu ; 16     //菜单项MenuItem 17     private MenuItem open,save; 18     //定义文件对话框 19     private FileDialog fdl ; 20     private File selectFile = null; 21      22     public Note(){ 23             init(); 24     } 25     private void init(){ 26 //            初始化窗体 27         frm=new Frame("记事本"); 28 //        设置窗体的位置和大小 29         frm.setBounds((WIDTH-600)/2, (HEIGHT-550)/2, 600, 550); 30 //        设置窗体的背景颜色 31         frm.setBackground(Color.lightGray); 32 //        清空布局 33         frm.setLayout(null); 34 //        将窗体显示 35         frm.setVisible(true); 36          37 //    初始化话菜单     38         bar=new MenuBar(); 39 //        用窗体的setMenuBar方法来设置菜单栏 40         frm.setMenuBar(bar); 41 //        在菜单栏上设置菜单 42         menu=new Menu("文件"); 43         bar.add(menu); 44 //    在菜单中添加菜单项 45         open=new MenuItem("打开"); 46         save=new MenuItem("保存"); 47         menu.add(open); 48         menu.add(save); 49 //初始化多行文本 50         frm_ta=new TextArea(); 51         frm_ta.setBounds(5, 48, 590, 495); 52         frm.add(frm.add(frm_ta)); 53          54 //        添加事件 55         event(); 56     } 57      58     private void event(){ 59 //            窗口关闭 60         frm.addWindowListener(new WindowAdapter() { 61             public void windowClosing(WindowEvent e){System.exit(0);} 62         }); 63          64 //        菜单项的打开,添加活动事件 65         open.addActionListener(new ActionListener() { 66             public void actionPerformed(ActionEvent e) { 67 //            初始化文件打开对话框,为frm添加名为"资源管理器"的用于读取文件的对话框 68                 fdl=new FileDialog(frm,"资源管理器",FileDialog.LOAD); 69 //            使文件对话框可见 70                 fdl.setVisible(true); 71                  72 //                获取用户选择的文件 73 //                获取文件对话框的文件 74                 String filename = fdl.getFile(); 75 //                获取文件对话框的目录 76                 String dir= fdl.getDirectory(); 77 //                如果用户没选择目录(路径)或者没选择文件,就退出函数.什么也不执行 78                 if(dir==null||filename==null){ 79                     return; 80                 } 81 //                初始化选择的文件 82                 selectFile=new File(dir,filename); 83 //                遍历选择的文件 84                 readFile(selectFile); 85             } 86         }); 87          88 //        菜单项中保存的事件监听 89         save.addActionListener(new ActionListener() { 90             public void actionPerformed(ActionEvent e) { 91                 if(selectFile==null){ 92 //                    初始化保持的文件对话框 93                     fdl=new FileDialog(frm,"资源管理器",FileDialog.SAVE); 94                     fdl.setVisible(true);  95                      96                     String  dir=fdl.getDirectory(); 97                     String filename=fdl.getFile(); 98                     if(dir==null||filename==null){ 99                         return;100                     }101 //                    将选择的文件路径封装成File对象102                     selectFile =new File(dir,filename);103                 }104 //                    将多行文本中的文件保存到file中105                 saveFile(selectFile);106             }107         });108     }109     110 //    读取打开的文夹111     private void readFile(File file){112         BufferedReader br=null;113         try{114             br=new BufferedReader(new FileReader(file));115             String len=null;116             frm_ta.setText("");117             while((len=br.readLine())!=null){118                 frm_ta.append(len+"\r\n");119             }120         }catch(IOException e){121             e.printStackTrace();122             throw new RuntimeException("打开文件失败!");123         }finally{124             try{125                 if(br!=null)126                     br.close();127             }catch(IOException e){128                 throw new RuntimeException("读取文件后关闭失败");129             }130         }131     }132     133     //保存文件的方法 134     public void saveFile(File file){135 //        获取文本框中的内容136         String text = frm_ta.getText();137         FileWriter fw=null;138         try{139             fw=new FileWriter(file);140             fw.write(text);141             fw.flush();142         }catch(IOException e){143             throw new RuntimeException("文件保存失败");144         }finally{145             try{146                 if(fw!=null)147                     fw.close();148             }catch(IOException e){149                 throw new RuntimeException("文件写入关闭失败!");150             }151         }152         153     }154 }

 

 

 

 

 

 

 

 

 

 

 

    

黑马程序员_GUI