黑马程序员_Java_GUI

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、GUI概述
1、 GUI:Graphical User Interface(图形用户接口)。
用图形的方式,来显示计算机的操作图形界面。方便、直观。
CLI:Command line User Interface(命令行用户接口),就是DOS 命令行操作,不直观。
2、 Java 为GUI 提供的对象,都存在java.Awt 和javax.Swing 两个包中。
Awt 与Swing:
java.Awt : (Abstract Window Toolkit,抽象窗口工具集),需要调用本地系统方法实现功能。属重量级控件。跨平台性较弱。
javax.Swing :在AWT 基础上,建立一套图形界面系统,其中提供了更多组件,而且完全由Java 实现。增强了可移植性,属轻量级控件。
开发时,制作图形化界面时,一般需要导入两个包:import java.awt.; 和import java.awt.event.;
3、 GUI继承关系图:
这里写图片描述

二、布局管理器
1、布局:容器中组件的排放方式。
2、 常见的布局管理器:
FlowLayout(流式布局管理器):从左到右的顺序排列。Panel 默认的布局管理器。
BorderLayout(边界布局管理器):东南西北中。Frame 默认的布局管理器。
GridLayout(网络布局管理器):规则的矩阵。
GardLayout(卡片布局管理器):选项卡。
GridBagLayout(网格包布局管理器):非规矩的矩阵。

三、Component
1、 Component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
2、 常用子类:Window、Panel(面板,不能单独存在)
Window 常用子类:Frame、Dialog
Frame 类:是带有标题和边框的顶层窗口。若显示窗体,必须设置setVisible 显示。设置Frame 时,有一个默认的管理器是边界式布局(BorderLayout)。
3、 方法
add() //添加组件(含参数)
setVisible(Boolean b) //根据参数的值来显示或隐藏组件
setSize() //设置窗体大小,参数为窗口的横坐标和纵坐标
setLocation() //设置窗体在本地位置,参数为横、纵坐标
setLayout() //设置布局管理器(参数可以是相应布局管理器的对象)
setBounds() //移动组件并调整其大小,参数是4 个坐标(左边距、右边距、宽、高)
addMouseListener() //添加指定的鼠标监听器
addKeyListener() //添加键盘监听事件
4、 创建图形化界面的步骤:
1)创建frame 窗体。
2)对窗体进行基本设置。比如大小,位置,布局。
3)定义组件。
4)将组件通过窗体的add 方法添加到窗体中。
5)让窗体显示,通过setVisible(true)
代码示例:

package demo.awt;

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

public class FrameDemo {

    private Frame f;
    private Button but;
    FrameDemo(){
        init();
    }

    public void init(){
        f=new Frame("my frame");//新建Frame,标题为my frame
        f.setBounds(300,100,600,500);//设置边界
        f.setLayout(new FlowLayout());//设置模式
        f.setVisible(true);//设置为可见
    }

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

}

四、事件监听机制
1、 事件监听机制组成:事件源、事件(Event)、监听器(Listener)、事件处理(引发事件后处理方式)。
(1)事件源(组件):awt或swing包中的那些图形界面组件
(2)事件(Event):每一个事件源都有自己特有的对应事件和共性事件
(3)监听器(Listener):将可触发某一事件的动作(不只一个动作),都封装到侦听器中。
(4)事件处理:引发事件后的处理方式。
2、 事件监听机制流程图
这里写图片描述
3、 使用说明
组成的前三个在java中都已将定义好了,直接获取其对象来用即可,我们需要做的就是对产生的动作进行处理。
步骤:
(1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
(2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
代码示例:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class AwtDemo {

    public static void main(String[] args) {

        Frame f=new Frame("my awt");
        f.setSize(500, 100);//设置大小
        f.setLocation(300, 200);//设置位置
        f.setLayout(new FlowLayout());//设置布局模式
        Button b=new Button("我是一个按钮");
        f.add(b);
        f.addWindowListener(new MyWin());//添加监听器
        f.setVisible(true);
    }

}

class MyWin extends WindowAdapter{
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

五、Window(窗体)
1、 监听:addWindowListener():添加窗口事件监听器
2、 WindowListener接口,复写方法,实例化对象,才能使用。但它有一个已复写全部方法的子类WindowAdapter。
3、WindowAdapter:接收窗口事件的抽象适配器类。此类中的方法为空。它是一个没有抽象方法的抽象类,目的是不能创建对象。此类存在的意思是方便创建监听器对象。使用:因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。并覆盖了其中的所有方法,那么只要继承WindowAdapter,覆盖需要的方法即可。
方法:
windowActivated():激活窗口时调用。
windowClosed():当窗口已被关闭时调用。
windowClosing():窗口正处在关闭过程中时调用。
windowDeactivated():后置窗口时调用。
windowDeiconified():取消图标化窗口时调用。
windowGainedFocus():该 Window 被设置为聚焦 Window 时调用,聚焦 Window 意味着该 Window 或其某个子组件将接收键盘事件。
windowIconified():窗口最小化时调用。
windowLostFocus():该 Window 不再为聚焦 Window 时调用,不再为聚焦 Window 意味着键盘事件不再传递到该 Window 或其任意子组件。
windowOpened():打开窗口时调用。
windowStateChanged():窗口状态改变时调用。
代码示例:

package demo.awt;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class MyWindowDemo {

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

    private Dialog d;
    private Label lab;
    private Button okbt;

    MyWindowDemo(){
        init();
    }

    public void init(){//初始化窗口
        f=new Frame("my window");
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());

        tf=new TextField(60);
        bt=new Button("转到");
        ta=new TextArea(25,70);

        d=new Dialog(f, "提示信息-self",true);
        lab=new Label();
        okbt=new Button("确定");

        d.add(lab);
        d.add(okbt);
        d.setBounds(400,200,240,150);
        d.setLayout(new FlowLayout());


        f.add(tf);
        f.add(bt);
        f.add(ta);
        myEvent();
        f.setVisible(true);
    }

    private void myEvent() {//事件监听函数

        okbt.addActionListener(new ActionListener() {//按钮事件监听器

            public void actionPerformed(ActionEvent e) {
                d.setVisible(false);
            }
        });
        d.addWindowListener(new WindowAdapter() {

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

        });

        bt.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                String path=tf.getText();
                File file=new File(path);
                if(file.exists()&&file.isDirectory()){
                    String[] dir=file.list();

                    for(String s:dir){
                        ta.append(s+"\n");
                    }
                }
                else{
                    String info="找不到"+path;
                    lab.setText(info);
                    d.setVisible(true);
                }


            }
        });

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        });
    }

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

}

六、Button(按钮)
1、监听:addActionListener():添加指定的动作监听器
2、 ActionListener 接口:用于接收操作事件的监听器接口。是少数没有适配器接口的其中一个。
其中只有一个方法actionPerformed(),作用:发生操作时调用。
3、 代码示例:

bt.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                d.setVisible(false);
            }
        });

七、鼠标事件和键盘事件
7.1 鼠标事件
1、 MouseListener: 用于接收组件上“感兴趣的”鼠标事件(eg:按下、释放、单击、进入或离开)的监听器接口。有适配器。
2、 方法:
mouseClicked(MouseEvent e) //鼠标单击(按下并释放)
mouseEntered(MouseEvent e) //鼠标进入组件
mouseExited(MouseEvent e) //鼠标离开组件
mousePressed(MouseEvent e) //鼠标按下时
mouseReleased(MouseEvent e) //鼠标释放时
3、 MouseEvent: (适配器)
成员变量:static int mouse_clicked
方法:int getClickCount() //返回鼠标单击次数
7.2 键盘事件
1、 keyListener: 接收键盘事件的监听器接口。有适配器。
2、 方法:
keyPressed(keyEvent e) //按下某个键时调用此方法
keyReleased(keyEvent e) //释放某个键时调用此方法
keyTyped(keyEvent e) //键入某个键时调用此方法
3、 keyEvent: (适配器)
char getkeyChar() //返回与此事件中的键相关联的字符
int getkeyCode() //获取键盘对应的码
static String getKeyText(int keyCode) //通过码获取对应的键盘字符
InputEvent 类中isControlDown() //判断ctrl 键是否被按下
InputEvent 类中consume() //以非默认方式处理事件,屏蔽键
代码示例:

package demo.awt;

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

public class MouseAndKeyEvent {

    private Frame f;
    private Button but;
    MouseAndKeyEvent(){
        init();
    }

    public void init(){//初始化
        f=new Frame("my frame");
        f.setBounds(300,100,600,500);
        f.setLayout(new FlowLayout());
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }

        });
        Button b=new Button("按钮");
        f.add(b);
        b.addMouseListener(new MouseAdapter() {//鼠标监听

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

        });
        b.addKeyListener(new KeyAdapter() {//键盘监听

            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode()==e.VK_A)
                    System.out.println("yiyang");
            }

        });
        f.setVisible(true);
    }

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

}

八、MenuBar(菜单栏)
1、 MenuBar 类: 封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与Frame 对象关联,可以调用该框架的setMenuBar 方法。
2、 主要方法:
add() //添加菜单栏
3、 关联类:
MenuItem 类:菜单项
MenuMenuMenuMenu类:菜单条
add() //将指定菜单项或者标签添加到菜单栏。
MenuBar包括Menu,Menu包括MenuItem、Menu(带箭头)。
代码示例:

package demo.awt;

import java.awt.*;
import java.awt.Event.*;
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;
    private MenuItem closeItem,openItem,saveItem;

    MyMenuDemo(){
        init();
    }

    private void init() {
        f=new Frame("my window");
        f.setBounds(300,100,500,600);
        f.setLayout(new FlowLayout());

        //添加菜单栏
        mb=new MenuBar();
        m=new Menu("文件");
        closeItem=new MenuItem("退出");
        openItem=new MenuItem("打开");
        saveItem=new MenuItem("保存");
        m.add(openItem);
        m.add(saveItem);
        m.add(closeItem);
        mb.add(m);

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

    private void myEvent() {//菜单点击事件
        openItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                new FileDialog(f,"打开文件",FileDialog.LOAD).setVisible(true);

            }
        });
        saveItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                new FileDialog(f,"保存文件",FileDialog.SAVE).setVisible(true);

            }
        });
        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 MyMenuDemo();

    }

}

九、Jar包双击执行
既然是图形化界面,就需要通过图形化界面的形式运行程序,而不是是用Dos命令行执行,那么如何通过双击程序就执行程序呢?这就需要将程序的class文件打包。
步骤如下:
1、首先要在java文件中导入一个包,没有则需创建一个包,如package mymenu;
2、生成包:通过编译javac -d c:\myclass MyMenu.java,此时则在c盘下的myclass文件夹下生成了所有的.class文件
3、在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: mymenu.MenuDemo”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
4、编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
5、此时双击即可执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值