Java--12.GUI

23 篇文章 0 订阅

Java–12

第九章 GUI


前言

21世纪,走进了信息时代,各种各样的软件层出不穷,但是总离不开程序开发,离不开程序开发语言,Java语言作为人们所熟知的一门语言,对于其有必要进行系统的学习。


GUI

1.定义

 Graphical User Interface,图形用户界面,为用户展现图形化界面;

2.容器

GUI可以看作为一个盒子,内部嵌套进多个组件,用以给用户显示;组件需要加入到容器当中
才可以显示;

2.1JFrame

每个组件都可以理解为一个容器,其中最大的容器为JFrame;
	JFrame frame = new JFrame();//实例化JFrame容器
    frame.setTitle("GUIDemo");//设置容器标题
    frame.setSize(800, 600);//设置容器大小
    frame.setLocation(280, 80);//设置容器位置,屏幕左上角为(0,0)
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭操作
    frame.setVisible(true);//使窗口显示 此操作放在最后

在这里插入图片描述生成了一个空白的GUI效果

2.2JPanel

JPanel中又可以添加很多其他组件
	JPanel panel = new JPanel();//实例化JPanel容器
    panel.setSize(800, 600);//设置JPanel容器大小
    frame.add(panel);//将JPanel容器加到JFrame容器中

3.组件

3.1 JLabel

标签组件,即显示一个文本
	JLabel label= new JLabel();//实例化JLabel组件
    label.setText("label");//设置标签显示的文本
    panel.add(label);//将文本框加入到JPanel容器中

3.2 JTextFiled

文本框,支持用户输入
	JTextField username = new JTextField();//实例化JTextField组件
    username.setColumns(20);//设置文本框列大小

3.3 JPasswordField

密码框,用于用户输入密码,会将输入的字符用*隐藏起来
	JPasswordField password = new JPasswordField();//实例化JPasswordField组件
    password.setColumns(20);//设置密码框列大小

3.4 JButton

按钮组件
	JButton login = new JButton();
    login.setText("登录");

4.事件监听器

除了组件用于显示外,用户的操作,需要触发一些指定的事件,所以需要使用到事件监听器
去监听并处理用户事件,通过组件.add(监听器)添加事件监听;常用的有ActionListene
r,MouseListener,MouseAdapter,KeyListener,KeyAdapter等
(1)ActionListener
new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                
            }
        }
ActionListener可以监听所有用户的事件;
(2)MouseListener
new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent e) {
                
            }

            @Override
            public void mousePressed(MouseEvent e) {

            }

            @Override
            public void mouseReleased(MouseEvent e) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent e) {

            }
        }
使用MouseListener事件监听可以监听鼠标事件,需要重写全部六个方法,常用MouseA
dapter代替,其可以按照需要重写一个或多个方法
(3)KeyListener
	new KeyListener(){

            @Override
            public void keyTyped(KeyEvent e) {
                
            }

            @Override
            public void keyPressed(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {

            }
        }
KeyListener监听键盘事件,可以读取用户点击键盘的一系列操作,需要重写全部的三个
方法,常使用KeyAdapter代替,其可以重写其中一个或多个方法;

5.其它控件

(1)菜单栏

菜单栏提供用户多种分类的操作,丰富了软件的功能,GUI中使用JMenuBar实现菜单栏
		JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu();
        menu.setText("文件");
        JMenuItem newFile = new JMenuItem();
        newFile.setText("新建");
        JMenuItem open = new JMenuItem();
        open.setText("打开");
        JMenuItem save = new JMenuItem();
        save.setText("保存");
        JMenuItem exit = new JMenuItem();
        exit.setText("退出");

在这里插入图片描述

其中整个菜单栏为JMenuBar,包含多个JMenu,而JMenu中又包含多个菜单项JMenuItem
,对于菜单项的事件处理需要使用ActionListener,不可以使用MouseListener

(2)弹窗

用户执行了某些操作,成功或者失败时,需要给用户一些提示信息,方便用户选择下一步进
行什么操作,GUI中使用JOptionPane进行弹窗显示
JOptionPane.showMessageDialog(frame, "保存成功", "提示信息", JOptionPane.INFORMATION_MESSAGE);
其中第一个参数为父控件,第二个参数为显示的信息,第三个参数为弹窗的标题,第四个参
数为弹窗的类型

在这里插入图片描述

6.实例

(1)简易用户登录界面实现

public class GUIDemo00 {

    public static void loginFrame() {
        //实例化容器
        JFrame frame = new JFrame();
        frame.setTitle("我的GUIDemo");//设置标题
        frame.setSize(800, 600);//设置容器大小
        frame.setLocation(280, 80);//设置位置 屏幕左上角位置为(0,0)
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭操作
        frame.setLayout(new GridLayout(4, 1));//设置布局为4行1列网格布局

        JMenuBar menu = new JMenuBar();//实例化菜单栏
        JMenu file = new JMenu();//实例化第一个菜单
        file.setText("文件");//设置菜单名称

        JMenuItem newFile = new JMenuItem();//实例化第一个菜单栏的菜单项
        newFile.setText("新建");//设置菜单项名称

        JMenu edit = new JMenu();
        edit.setText("编辑");

        JMenuItem copy = new JMenuItem();
        copy.setText("复制");

        JPanel first = new JPanel();//设置第一个JPanel容器

        JLabel title = new JLabel();
        title.setText("登录");

        JPanel second = new JPanel();

        JLabel userTitle = new JLabel();
        userTitle.setText("username");
        JTextField username = new JTextField();//实例化文本框
        username.setColumns(20);//设置文本框为20列

        JPanel third = new JPanel();
        JLabel passwordTitle = new JLabel();
        passwordTitle.setText("password");
        JPasswordField password = new JPasswordField();//实例化密码框
        password.setColumns(20);


        JPanel fourth = new JPanel();
        JButton login = new JButton();//实例化按钮
        login.setText("登录");

        //给登录按钮添加鼠标事件监听
        login.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String u = username.getText();//获取文本框内容
                String p = password.getText();//获取密码框内容
                System.out.println("username:" + u + " password:" + p);
                //弹出提示信息
                JOptionPane.showMessageDialog(frame, "登录成功", "提示信息", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        JButton register = new JButton();
        register.setText("注册");

        register.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                //新建窗口
                registerFrame();
                //设置当前窗口不可见
                frame.setVisible(false);
                //关闭当前窗口
                frame.dispose();
            }
        });


        //添加组件
        first.add(title);

        second.add(userTitle);
        second.add(username);

        third.add(passwordTitle);
        third.add(password);

        fourth.add(login);
        fourth.add(register);

        frame.add(first);
        frame.add(second);
        frame.add(third);
        frame.add(fourth);

        menu.add(file);
        menu.add(edit);
        file.add(newFile);
        edit.add(copy);

        //设置文菜单栏
        frame.setJMenuBar(menu);

        //显示窗口
        frame.setVisible(true);
    }

    public static void registerFrame() {
        JFrame frame = new JFrame();
        frame.setTitle("我的GUIDemo");
        frame.setSize(800, 600);
        frame.setLocation(280, 80);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(4, 1));

        JMenuBar menu = new JMenuBar();
        JMenu file = new JMenu();
        file.setText("文件");

        JMenuItem newFile = new JMenuItem();
        newFile.setText("新建");

        JMenu edit = new JMenu();
        edit.setText("编辑");

        JMenuItem copy = new JMenuItem();
        copy.setText("复制");

        JPanel first = new JPanel();

        JLabel title = new JLabel();
        title.setText("注册");

        JPanel second = new JPanel();

        JLabel userTitle = new JLabel();
        userTitle.setText("username");
        JTextField username = new JTextField();
        username.setColumns(20);

        JPanel third = new JPanel();
        JLabel passwordTitle = new JLabel();
        passwordTitle.setText("password");
        JPasswordField password = new JPasswordField();
        password.setColumns(20);


        JPanel fourth = new JPanel();
        JButton login = new JButton();
        login.setText("返回");

        login.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                loginFrame();
                frame.dispose();
            }
        });

        JButton register = new JButton();
        register.setText("注册");

        register.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String u = username.getText();
                String p = password.getText();
                System.out.println("username:" + u + " password:" + p);
                JOptionPane.showMessageDialog(frame, "注册成功", "提示信息", JOptionPane.INFORMATION_MESSAGE);
            }
        });


        first.add(title);

        second.add(userTitle);
        second.add(username);

        third.add(passwordTitle);
        third.add(password);

        fourth.add(register);
        fourth.add(login);

        frame.add(first);
        frame.add(second);
        frame.add(third);
        frame.add(fourth);

        menu.add(file);
        menu.add(edit);
        file.add(newFile);
        edit.add(copy);

        frame.setJMenuBar(menu);

        frame.setVisible(true);
    }

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

在这里插入图片描述在这里插入图片描述

(2)简易记事本实现

可以进行文件的新建,打开,保存,退出等基础功能
public class GUIDemo01 {
    public static void index(File file) {
        JFrame frame = new JFrame();
        frame.setTitle("我的记事本 "+file.getName().split("\\.")[0]);
        frame.setLocation(100, 100);
        frame.setResizable(false);
        frame.setSize(300, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu();
        menu.setText("文件");
        JMenuItem newFile = new JMenuItem();
        newFile.setText("新建");
        JMenuItem open = new JMenuItem();
        open.setText("打开");
        JMenuItem save = new JMenuItem();
        save.setText("保存");
        JMenuItem exit = new JMenuItem();
        exit.setText("退出");

        JPanel panel = new JPanel();
        panel.setSize(frame.getSize());

        JTextArea textArea = new JTextArea();
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);
        textArea.setColumns(frame.getWidth()/textArea.getFont().getSize());
        textArea.setRows(frame.getHeight()/textArea.getFont().getSize());
        try {
            if (!file.exists()) {
                file.createNewFile();
            }
            FileReader reader = new FileReader(file);
            int i = 0;
            int j = 0;
            char[] ch = new char[(int) file.length()];
            while ((i = reader.read()) != -1) {
                ch[j++] = (char) i;
            }
            textArea.setText(String.valueOf(ch));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setSize(frame.getSize());

        save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String content = textArea.getText().trim();
                try {
                    FileWriter writer = new FileWriter(file);
                    writer.write(content);
                    writer.close();
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
                JOptionPane.showMessageDialog(frame, "保存成功", "提示信息", JOptionPane.INFORMATION_MESSAGE);
            }
        });
        exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame.setVisible(false);
                frame.dispose();
            }
        });

        newFile.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String filename = JOptionPane.showInputDialog("请输入文件名称");

                if(filename!=null&&filename.split("\\.").length==1){
                    filename=filename+".txt";
                }
                File nF=new File(filename);
                if(!nF.exists()){
                    try {
                        nF.createNewFile();
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                }

                index(nF);
                frame.setVisible(false);
                frame.dispose();
            }
        });

        open.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String filename = JOptionPane.showInputDialog("请输入文件名称");

                if(filename!=null&&filename.split("\\.").length==1){
                    filename=filename+".txt";
                }
                File nF=new File(filename);
                if(!nF.exists()){
                    try {
                        nF.createNewFile();
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                }

                index(nF);
                frame.setVisible(false);
                frame.dispose();
            }
        });

        menu.add(newFile);
        menu.add(open);
        menu.add(save);
        menu.add(exit);
        menuBar.add(menu);

        panel.add(scrollPane);
        frame.setJMenuBar(menuBar);
        frame.add(panel);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        String filename = "src/demo12/我的记事本.txt";
        index(new File(filename));
    }
}

在这里插入图片描述在这里插入图片描述

笔记如有错误,遗漏之处,欢迎指正!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值