GUI

一、GUI(图形用户界面)

GUI
• Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI
• Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。

举例:
• 比如:创建文件夹,或者删除文件夹等

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

二、继承关系图
这里写图片描述

Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。
Container常用子类:Window Panel(面板,不能单独存在。)
Window常用子类:Frame Dialog

三、常见布局管理
1)、布局:容器中的组件排列方式
2)、常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
3)、如果存在多种布局方式,如何创建窗体界面呢?步骤:
1)先将窗体Frame进行大区域的划分,设置其布局管理器,加入面板Panel
2)将组件加入Panel,设置面板的布局管理器。

四、简单的创建窗体过程

Container常用子类:Window Panel(面板,不能单独存在。)

Window常用子类:Frame Dialog

简单的窗体创建过程:
• Frame f = new Frame(“my window”);
• f.setLayout(new FlowLayout());
• f.setSize(500,400);//设置窗体大小
• f.setLocation(300,200);//设置窗体出现在屏幕的位置
• f.setVisible(true);

五、事件监听机制组成

事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)

事件监听机制流程图
这里写图片描述

事件监听机制:

确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括
事件源对象。通过getSource()或者,getComponent()获 取。)

事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。
我们要做的事情是,就是对产生的动作进行处理。

/*建立一上类似QQ登入的界面*/  

package nuddles.j2seDemo;  

import java.awt.*;  
import java.awt.event.*;  

class FrameDemo{  
    // 创建工具类  
    private Frame frame;  
    private Button button;  
    private TextField tf;  
    FrameDemo(){  
        init();  
    }  
    public void init(){  
        // 初始化方法  
        frame = new Frame("my frame");  
        button = new Button("my button");  
        tf = new TextField(20);  
        frame.setBounds(300,100,600,500);  
        frame.setLayout(new FlowLayout());  
        frame.add(tf);  
        frame.add(button);  
        myEvent();  
        // 调用事件监听方法  
        frame.setVisible(true);  

    }  
    private void myEvent(){  
        // 窗口关闭事件  
        frame.addWindowListener(new WindowAdapter(){  
            public void windowClosing(WindowEvent e){  
                System.exit(0);  
            }  
        });  
        button.addActionListener(new ActionListener(){  
            //按钮事件  
            int count = 0;  
            public void actionPerformed(ActionEvent e){  
                count++;  
                System.out.println("button clicked"+count);  
                if (count>=5) {  
                    System.exit(0);  
                }  
            }  
        });  
        tf.addKeyListener(new KeyAdapter(){  
            // 键盘事件  
            public void keyPressed(KeyEvent ke){  
                int code = ke.getKeyCode();  
                System.out.println("haha");  
                if (code<KeyEvent.VK_0||code>KeyEvent.VK_9) {  
                    ke.consume();  
                    System.out.println("these are not numbers");  
                }  
            }  
        });  
        button.addMouseListener(new MouseAdapter(){  
            // 鼠标事件  
            public void mouseClicked(MouseEvent e){  
                if (e.getClickCount()==2) {  
                    System.exit(0);  
                }  
            }  
        });  
        button.addKeyListener(new KeyAdapter(){  
            public void keyPressed(KeyEvent e){  
                int code = e.getKeyCode();  
                if (e.isControlDown()&&code==KeyEvent.VK_ENTER) {  
                    System.exit(0);  
                }  
            }  
        });  

    }  

    public static void main(String[] args) {  
        new FrameDemo();  
    }  
}  

六、菜单:Menu
1、菜单继承关系
这里写图片描述

2、说明
1)Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
2)MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
3)MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
4)菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件处理。
5)通过setMenuBar()方法,将菜单添加到Frame中。

/*
练习:
创建菜单项,打开,保存,退出 打开文件显示文本区域中。
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MyMenuTest{

    private Frame f;
    private MenuBar bar;
    private TextArea ta;
    private Menu fileMenu;
    private MenuItem openItem,saveItem,closeItem;


    private FileDialog openDia,saveDia;

    private File file;
    MyMenuTest(){
        init();
    }
    public void init(){
        f = new Frame("my window");
        f.setBounds(300,100,650,600);

        bar = new MenuBar();

        ta = new TextArea();

        fileMenu = new Menu("文件");

        openItem = new MenuItem("打开");
        saveItem = new MenuItem("保存");
        closeItem = new MenuItem("退出");

        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(closeItem);
        bar.add(fileMenu);

        f.setMenuBar(bar);


        openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
        saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);


        f.add(ta);
        myEvent();

        f.setVisible(true);


    }
    private void myEvent(){

        saveItem.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                if(file==null){
                    saveDia.setVisible(true);

                    String dirPath = saveDia.getDirectory();
                    String fileName = saveDia.getFile();
                    if(dirPath==null || fileName==null)
                        return ;
                    file = new File(dirPath,fileName);
                }

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

                    String text = ta.getText();

                    bufw.write(text);
                    //bufw.flush();
                    bufw.close();
                }
                catch (IOException ex){
                    throw new RuntimeException();
                }

            }
        });


        openItem.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                openDia.setVisible(true);
                String dirPath = openDia.getDirectory();
                String fileName = openDia.getFile();
//              System.out.println(dirPath+"..."+fileName);
                if(dirPath==null || fileName==null)
                    return ;

                ta.setText("");
                file = new File(dirPath,fileName);

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

                    String line = null;

                    while((line=bufr.readLine())!=null){
                        ta.append(line+"\r\n");
                    }

                    bufr.close();
                }
                catch (IOException ex){
                    throw new RuntimeException("读取失败");
                }


            }
        });


        closeItem.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        });
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e)
            {
                System.exit(0); 
            }
        });
    }

    public static void main(String[] args) {
        new MyMenuTest();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值