Java-GUI

GUI(图形用户界面)

GUI

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

CLI

  • Command line User Interface (命令行用户接口)
    就是常见的Dos命令行操作。
    需要记忆一些常用的命令,操作不直观。
    举例:
    比如:创建文件夹,或者删除文件夹等

Java为GUI提供的对象都存在java.awtjavax.swing两个包中

Awt与 Swing

java.awt:

Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件

javax.swing:

在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件

这里写图片描述

布局管理器

容器中的组件的排放方式,就是布局
常见的布局管理器

FlowLayout(流式布局管理器)
  • 从左到右的顺序排列。
  • Panel默认的布局管理器。
BorderLayout(边界布局管理器)
  • 东,南,西,北,中
  • Frame默认的布局管理器。
GridLayout(网格布局管理器)
  • 规则的矩阵
CardLayout(卡片布局管理器)
  • 选项卡
GridBagLayout(网格包布局管理器)
  • 非规则的矩阵

建立一个简单的窗体

  • 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()获取。)

例程

  • 通过按钮关闭窗体。
  • 在窗体中通过按钮创建按钮。
  • 熟悉键盘事件与鼠标事件

代码实现

FrameDemo
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;
import java.awt.event.WindowListener;

public class FrameDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        //1,创建一个窗体。Frame
        Frame f = new Frame("my frame");
        //2, 对窗体进行基本设置。
        f.setSize(500, 400);
        f.setLocation(400, 200);
        //设置布局。
        f.setLayout(new FlowLayout());

        //给窗体添加组件。
         Button but = new Button("my button");

         //加入一个文本框组件。
         TextField tf = new TextField(40);

         //将组件添加到窗体中。
         f.add(tf);
         f.add(but);
         /*
          * 需求:想要点击按钮有效果,比如打印一句话。
          * 思路:
          * 1,确定事件源。按钮。
          * 2,确定监听器。按钮添加监听器,按钮对象最清楚。到按钮对象中查找。
          * 3,定义处理方式。
          * 
          * 定义的规范:XXXLinstener:XXX监听器。 --对应的XXXEvent事件。
          */
         //1,在按钮上添加所需的监听器。
         but.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
//              System.out.println("按钮被触发了....."+e);
//              System.exit(0);
                /*
                for (int i = 0; i < 4; i++) {
                    for (int j = 0; j < 5; j++) {
                        System.out.print("*");
                    }
                    System.out.println();
                }*/
            }
        });

         /*
          * 需求:想要实现点击窗体X就可以实现窗体的关闭。
          * 思路:
          * 1,事件源:窗体。
          * 2,监听器。通过窗口对象去查。
          * 3,事件处理。
          * 
          * 到底哪些监听接口有适配器类?
          * 只要监听接口的中的方法在2个以内,都没有适配器类。适配器的出现只为方便创建监听器对象。
          * 但是一般监听接口都有适配器。
          * 
          */ 
         f.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("window closing");
                System.exit(0);
            }

            @Override
            public void windowOpened(WindowEvent e) {

                System.out.println("孔雀开屏!window open");
            }

        });

         /*
          * 演示鼠标监听。
          * 
          * 按钮事件源。
          * 鼠标监听器注册到按钮上。
          * 
          * 
          * 组件.addXXXListener(new XXXAdapter()
          * {
          *     public void methodName(XXXEvent e){}
          * }));
          * 
          */

        but.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {

                /*
                 * 想要对鼠标双击进行处理。应该找鼠标事件对象。因为事件对象一产生,内部必然封装事件源以及事件相关内容。
                 * 要查MouseEvent对象。
                 */
                if(e.getClickCount() == 2){

                    System.out.println("mouse double click");
                }
            }

        });
        /*
         * 需求:文本框中只能输入数字。
         * 事件源:文本框。
         * 文本框注册键盘监听。
         * 事件处理
         */

        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {

                //1,如何获取录入的内容。通过键盘事件对象获取。
//              char key = e.getKeyChar();
//              int code = e.getKeyCode();
//              System.out.println(code+"...."+KeyEvent.getKeyText(code));

//              int code = e.getKeyCode();
//              if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
//                  System.out.println("必须是0-9数字");
//                  e.consume();//直接取消默认处理方式。
//              }


                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("ctrl+enter run");

                }

            }

        });

        //3,让窗体显示。
        f.setVisible(true);

        System.out.println("over");
    }

}
MyWindow

这里写图片描述

package cn.itcast.swing;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class MyWindow extends javax.swing.JFrame {
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    private JButton jButton1;
    private JTextArea jTextArea1;
    private JScrollPane jScrollPane1;
    private JTextField jTextField1;

    /**
    * Auto-generated main method to display this JFrame
    */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MyWindow inst = new MyWindow();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    public MyWindow() {
        super();
        initGUI();
    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            getContentPane().setLayout(null);
            {
                jButton1 = new JButton();
                getContentPane().add(jButton1);
                jButton1.setText("\u786e\u5b9a");
                jButton1.setBounds(466, 21, 128, 50);
                jButton1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {
                        jButton1ActionPerformed(evt);
                    }
                });
            }
            {
                jTextField1 = new JTextField();
                getContentPane().add(jTextField1);
                jTextField1.setBounds(17, 21, 437, 50);
                jTextField1.addKeyListener(new KeyAdapter() {
                    public void keyPressed(KeyEvent evt) {
                        jTextField1KeyPressed(evt);
                    }
                });
            }
            {
                jScrollPane1 = new JScrollPane();
                getContentPane().add(jScrollPane1);
                jScrollPane1.setBounds(17, 83, 577, 272);
                {
                    jTextArea1 = new JTextArea();
                    jScrollPane1.setViewportView(jTextArea1);
                }
            }
            pack();
            this.setSize(626, 401);
        } catch (Exception e) {
            //add your error handling code here
            e.printStackTrace();
        }
    }

    private void jButton1ActionPerformed(ActionEvent evt) {


        showDir();
    }

    private void showDir() {
        //通过在文本框输入具体的目录,将目录中的当前文件或者文件夹的名称列出到文本区域中。
        /*
         * 思路:
         * 1,获取文本框中的路径。
         * 2,将路径封装成File对象。list();
         * 3,将list()列表中的内容展现在文本区域中。
         */

        //1,获取路径。通过文本框对象完成。
        String str_dir = jTextField1.getText();

        //2,将字符串路径封装成File对象。
        File dir = new File(str_dir);
        //判断。
        if(dir.exists()&&dir.isDirectory()){


            //清空文本区域。
            jTextArea1.setText("");
            //3,获取文件名称列表。
            String[] names = dir.list();
            for(String name :names){
            //4,将名字显示到文本区域。
            jTextArea1.append(name+LINE_SEPARATOR);
            }

        }
    }

    private void jTextField1KeyPressed(KeyEvent evt) {

        if(evt.getKeyCode()==KeyEvent.VK_ENTER){
            showDir();
        }

    }

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值