黑马程序员_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 }

 

 

 

 

 

 

 

 

 

 

 

    

posted @ 2014-08-23 19:59  Love_Ezreal  阅读(166)  评论(0编辑  收藏  举报