黑马程序员_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添加Menu,Menu添加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 }

    

时间: 2024-08-28 20:04:54

黑马程序员_GUI的相关文章

黑马程序员_GUI入门

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶啊啊啊啊啊

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员------IO(五)

黑马程序员------IO(五) 1.1  操作对象(示例1)ObjectInputStream与ObjectOutputStream 被操作的对象需要实现Serializable. Serializable:用于给被序列化的类加入ID号,用于判断类和对象是否是同一个版本 类通过实现java.io.Serializable接口以启用序列化功能,Serializable只是一个标记接口. 1 示例1: 2 import java.io.*; 3 4 class ObjectStreamDemo 5

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员[email&#160;protected]和@synsthesize的使用

一.@property和@synthesize的基本使用 @property :可以自动生成某个成员变量的setter和getter的声明(@property int age;).写在@interface里面: @synthesize :自动生成age的setter和getter,并且在方法内部访问的是_age这个成员变量(@synthesize age = _age; // 如果后面不写=_age默认就是访问age成员变量).写在@implementation里面: 二.@property和@

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员_API

------- android培训.java培训.期待与您交流! ---------- ======================API========================================= 看api的步骤: 1.看类的说明.其所属的包以及出现的版本. 2.看其构造函数. 3.看普通的方法.看时注意参数,和返回值类型. Object类 1. private static native void registerNatives (); 见到本地关键字修饰的方法,这个方

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员-单例模式

单例设计模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案.显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象.会方便