java GUI--day22

GUI

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

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

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

Awt
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
对平台依赖性强,跨平台性差

Swing:
javax.Swing:在Awt基础上,建立的一套图形界面系统
其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件
对平台依赖性不大,跨平台性强

Eclipse使用的是Eclipse开发小组独立编写的图形化界面Swt
也是基于Awt基础上开发出来的

这里写图片描述

这里写图片描述

创建图形化界面:

1,创建flame窗体 。
2,对窗体进行基本设置(大小,位置,布局,颜色) 。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中 5,让窗体显示,通过setVisible(true)

事件监听机制的特点:
1,事件源
2,事件
3,事件监听器
4,事件处理

事件源:就是awt包或者swing包中的那些图形界面组件。

事件:每一个事件源都有自己的特有对应事件和共性事件。

监听器:将可以触发某一个事件的动作(不止一个)都已经封装到了监听器中。

以上三者在java中都已经定义好了,直接获取其对象使用即可 我们要做的事,就是对产生的动作进行处理。

package day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtDemo {

    public static void main(String[] args) {

        Frame f = new Frame("my awt");
        f.setSize(300, 200);
        f.setLocation(500, 300);
        f.setLayout(new FlowLayout());

        Button b = new Button("点我嘛~~");

        f.add(b);

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

            public void windowActivated(WindowEvent e) {
                System.out.println("我被激活了");
            }

            public void windowOpened(WindowEvent e) {
                System.out.println("我被打开了");
            }
        });

        f.setVisible(true);
    }

}

这里写图片描述

让按钮具备退出程序的功能

按钮就是事件源 那么选择哪个监听器呢? 通过关闭窗体事例了解到:

想要知道哪个组件具备什么样的监听器, 需要查看该组件对象的功能。

通过查阅button的描述,发现按钮支持一个特有监听addActionListener。

package day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameDemo {

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

    }

    private Frame f;
    private Button but;

    FrameDemo() {
        init();
    }

    public void init() {
        f = new Frame("my frame");

        // 对frame进行基本设置
        f.setBounds(500, 300, 300, 200);
        f.setLayout(new FlowLayout());

        but = new Button("退出");

        // 将组件添加到frame中
        f.add(but);

        // 加载一下窗体上的事件
        myEvent();

        // 显示窗体
        f.setVisible(true);
    }

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


        but.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("按钮退出");
                System.exit(0);
            }
        });
    }

}

这里写图片描述
这里写图片描述

设置鼠标与键盘

package day22;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MouseAndKeyEvent {

    private Frame f;
    private Button but;
    private TextField tf;

    MouseAndKeyEvent() {
        init();
    }

    public void init() {
        f = new Frame("my frame");

        f.setBounds(500, 300, 300, 200);
        f.setLayout(new FlowLayout());

        tf = new TextField(10);

        but = new Button("确定");

        f.add(tf);

        f.add(but);

        myEvent();

        f.setVisible(true);
    }
    private void myEvent() {
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.out.println("退出");
                System.exit(0);
            }
        });

        tf.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e){
                if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9)){

                    System.out.println(e.getKeyChar()+"是非法的");
                    e.consume();
                }
            }
        });


//      给but添加一个键盘监听
        but.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e){

//              System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
                /*if(e.getKeyCode()==KeyEvent.VK_ENTER)
                    System.exit(0);*/

                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
                    System.out.println("control+enter is run");
            }
        });




        but.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("action");
            }
        });

        but.addMouseListener(new MouseAdapter() {
            public void mouseEntered(MouseEvent e){
                System.out.println("鼠标进入该组件");
            }

            public void mouseExited(MouseEvent e){
                System.out.println("鼠标离开该组件");
            }

            public void mouseClicked(MouseEvent e){
                if(e.getClickCount()==2)
                    System.out.println("双击动作");
//              System.out.println("点击动作");
            }
        });
    }

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

}

这里写图片描述

这里写图片描述

制作自己的对话框

该对话框用于查阅目录下的文件夹,
day22(9-10)

package day22;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class MyWindowDemo {

    private Frame f;
    private TextField tf;
    private Button but;
    private TextArea ta;

    private Dialog d;

    private Label lab;
    private Button butt;

    public MyWindowDemo() {
        init();

    }

    public void init() {
        f = new Frame("My Window");
        f.setBounds(300, 100, 400, 250);
        f.setLayout(new FlowLayout());

        d = new Dialog(f, "提示信息--self", true);
        d.setBounds(400, 100, 300, 150);
        d.setLayout(new FlowLayout());

        lab = new Label("找不到文件路径");
        butt = new Button("确定");
        d.add(lab);
        d.add(butt);

        tf = new TextField(20);

        but = new Button("转到");

        ta = new TextArea(5, 50);

        f.add(tf);
        f.add(but);
        f.add(ta);

        myEvent();
        f.setVisible(true);
    }

    private void myEvent() {
        but.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                showDir();
            }
        });

        tf.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER)
                    showDir();
            }
        });

        d.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                d.setVisible(false);
            }
        });

        butt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                d.setVisible(false);
            }
        });

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

    }

    private void showDir() {
        String dirPath = tf.getText();

        File dir = new File(dirPath);

        if (dir.exists() && dir.isDirectory()) {
            ta.setText("");
            String[] names = dir.list();
            for (String name : names) {
                ta.append(name + "\r\n");
            }
        } else {

            String info = "您输入的信息" + dirPath + "错误,请重新输入";
            lab.setText(info);

            d.setVisible(true);
        }
    }

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

这里写图片描述

制作菜单,包含子菜单,子条目

package day22;

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyMenuDemo {

    private Frame f;
    private MenuBar mb;
    private Menu m, subm;
    private MenuItem closeItem, subItem;

    public MyMenuDemo() {
        init();
    }

    public void init() {
        f = new Frame("My Menu");
        f.setBounds(300, 100, 400, 250);
        f.setLayout(new FlowLayout());

        mb = new MenuBar();
        m = new Menu("文件");
        subm = new Menu("子文件");
        closeItem = new MenuItem("退出");
        subItem = new MenuItem("子条目");

        mb.add(m);
        m.add(subm);
        m.add(closeItem);
        subm.add(subItem);

        f.setMenuBar(mb);
        f.setVisible(true);

        myEvent();
    }

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

        closeItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {

        new MyMenuDemo();
    }

}

这里写图片描述

打开与保存

在上例中添加打开文件与保存的功能,可以打开txt文件,并在文本区域中进行修改并保存。

package day22;

import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class MyMenuDemo {

    private Frame f;
    private MenuBar mb;
    private Menu m, subm;
    private MenuItem closeItem, subItem, openItem, saveItem;

    private FileDialog openfd, savefd;

    private TextArea ta;

    private File file;

    public MyMenuDemo() {
        init();
    }

    public void init() {
        f = new Frame("My Menu");
        f.setBounds(300, 100, 600, 450);
        ta = new TextArea();
        f.add(ta);

        mb = new MenuBar();
        m = new Menu("文件");
        subm = new Menu("子文件");
        closeItem = new MenuItem("退出");
        subItem = new MenuItem("子条目");

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

        mb.add(m);
        m.add(subm);
        m.add(openItem);
        m.add(saveItem);
        m.add(closeItem);
        subm.add(subItem);

        f.setMenuBar(mb);
        f.setVisible(true);

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

        myEvent();
    }

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

        closeItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        //打开
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                openfd.setVisible(true);
                String dirPath = openfd.getDirectory();
                String fileName = openfd.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 e2) {
                    throw new RuntimeException("打开失败");
                }
            }
        });
        //保存
        saveItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(file==null){

                    savefd.setVisible(true);

                    String dirPath = savefd.getDirectory();
                    String fileName = savefd.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 e2) {
                    throw new RuntimeException("保存失败");
                }
            }
        });

    }

    public static void main(String[] args) {

        new MyMenuDemo();
    }

}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值