黑马程序员_GUI

   ------- android培训、java培训、期待与您交流! ----------  

                              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 }

 

 

 

 

 

 

 

 

 

 

 

    

你可能感兴趣的:(程序员)