Java第十一章——GUI编程

Java第十一章——GUI编程

GUI概念

GUI:图形用户界面,它能够是应用程序看上去更加好看。

Swing概述

Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同行为。

Swing中的大部分组件类位于Javax,swing包中。

Swing中的组件非常丰富,支持很多功能强大的组件

容器组件

Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;

组件不能独立的显示出来,必须将组件放在一定的容器中才可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。

窗口(Frame)和面板(Panel)是最常用的两个容器

常用容器

JFrame

JFrame用于在Swing程序中创建窗体;

JFrame类的构造方法:

构造方法说明
JFrame()创建新窗体,该窗体初始为不可见
JFrame(String title)创建新窗体,使用参数title指定标题,该窗体初始为不可见

常用方法

void setSize(int width, int height)

void setVisible(boolean b)

void setTitle(String title

void setResizable(boolean resizable)

void setLocation(int x,int y)

void setBounds(int x, int y, int width, int height)

void setLocationRelativeTo(null);

void setDefaultCloseOperation(int operation)

void dispose()



import javax.swing.*;
import java.awt.*;

public class FrameDemo1 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        JPanel jp = new JPanel();
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);//添加背景颜色
        JButton jb = new JButton("这是我的第一个按钮");
        jb.setBackground(Color.red);
        jp.add(jb);

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo1 f = new FrameDemo1();
        f.createFrame();
    }
}

Jpanel

JPanel提供面板。它是轻量级的容器;

面板中 可以添加其他组件,也可以设置布局,我们一般使用面板来实现布局嵌套;

构造方法说明
JPanel()创建一个空面板
JPanel(LayoutManaer layout)创建带有指定布局的面板

● 框架(JFrame) 内部包含一个名叫Container(内容面板)的面板容器,如果要给

框架中添加图形控件,通常将它们加入到这个内容面板中。

● 通过JFrame类中的getContentPane()方法即可获得此框架的内容面板。

● 也可以自己创建Jpanel面板对象,把JPanel作为一个组件添加到某个容器中.

常用方法:

void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色

void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器

Component add(Component comp)往面板中添加一个组件

void remove(Component comp)从面板中移除指定的组件

void removeAll()从面板中移除所有组件


import javax.swing.*;
import java.awt.*;

public class FrameDemo2 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());//设置左上角图标


        //在窗口中添加面板
        //流式布局 new FlowLayout(对齐方式,水平间距,垂直间距)
        //面板的布局方式默认是流式布局   水平间距和垂直间距默认为5
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT,5,20));
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);
        //按钮组件
        JButton jb1 = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        JButton jb3 = new JButton("按钮3");
        JButton jb4 = new JButton("按钮4");
        JButton jb5 = new JButton("按钮5");
        JButton jb6 = new JButton("按钮6");

        jp.add(jb1);
        jp.add(jb2);
        jp.add(jb3);
        jp.add(jb4);
        jp.add(jb5);
        jp.add(jb6);
        jp.remove(jb1);//移除组件

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo2 f = new FrameDemo2();
        f.createFrame();
    }

布局管理器

swing中,提供了布局管理器类的对象可以管理

​ 每个JPanel都有一个布局管理器对象,当容器需要对每个组件进行定位或判断大小尺寸时,就会调用其对应的布局管理器,调用JPanel的setLayout方法改变其布局管理器对象或通过构造方法设置。

Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但他不管怎样怎样放置。至于如何放置需要用到的布局管理器(Container)。Java中有三种常用的布局管理器,分别是:FlowLayout,BorderLayout,GridLayout。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TqsGvycI-1627527637647)(C:\Users\辉欲静,而风止。\Desktop\三种布局.png)]

FlowLayout

import javax.swing.*;
import java.awt.*;

public class FrameDemo2 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //流式布局 new FlowLayout(对齐方式,水平间距,垂直间距)
        //面板的布局方式默认是流式布局   水平间距和垂直间距默认为5
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT,5,20));
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);
        //按钮组件
        JButton jb1 = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        JButton jb3 = new JButton("按钮3");
        JButton jb4 = new JButton("按钮4");
        JButton jb5 = new JButton("按钮5");
        JButton jb6 = new JButton("按钮6");

        jp.add(jb1);
        jp.add(jb2);
        jp.add(jb3);
        jp.add(jb4);
        jp.add(jb5);
        jp.add(jb6);
        jp.remove(jb1);//移除组件

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo2 f = new FrameDemo2();
        f.createFrame();
    }
}

BorderLayout

import javax.swing.*;
import java.awt.*;


public class FrameDemo3 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //边界布局  分为五个区域:上,下,左,右,中间(中间是必须的)
        JPanel jp = new JPanel(new BorderLayout());
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);//添加beijing
        JButton jb1 = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        JButton jb3 = new JButton("按钮3");
        JButton jb4 = new JButton("按钮4");
        JButton jb5 = new JButton("按钮5");


        jp.add(jb1,BorderLayout.NORTH);//指定位置
        jp.add(jb2,BorderLayout.EAST);
        jp.add(jb3,BorderLayout.SOUTH);
        jp.add(jb4,BorderLayout.WEST);
        jp.add(jb5);//不指定位置默认在中间


        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo3 f = new FrameDemo3();
        f.createFrame();
    }
}
GridLayout

import javax.swing.*;
import java.awt.*;


public class FrameDemo4 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //网格布局 设置行列数,从第一行第一列开始添加组件,一行沾满时,从第二行开始
        JPanel jp = new JPanel(new GridLayout(2,2));
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);//添加背景颜色
        JButton jb1 = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        JButton jb3 = new JButton("按钮3");
        JButton jb4 = new JButton("按钮4");
        JButton jb5 = new JButton("按钮5");


        jp.add(jb1);
        jp.add(jb2);
        jp.add(jb3);
        jp.add(jb4);
        jp.add(jb5);


        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo4 f = new FrameDemo4();
        f.createFrame();
    }
}

常用组件

标签(JLabel)

​ 标签是容纳文本和图标的控件,通常用来在界面中识别别的控件。

、构造函数:

JLabel()

创建一个空的标签

JLabel(String text) 创建一个带文本的标签

JLabel(Icon image)

创建一个带图像的标签

方法:

void setText(String text)

设置标签上的文本

String getText()

获得标签上的文本

void setVisible(boolean b) 设置标签是否为可见

setFont(new Font(“宋体”,Font.BOLD, 18)); 设置字体


import javax.swing.*;
import java.awt.*;


public class FrameDemo5 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //流式布局
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
        this.add(jp);//this 表示窗口
        JLabel jLabel = new JLabel("账号");
        jLabel.setFont(new Font("正楷",Font.ITALIC,20));
        //单行输入文本框
        JTextField jtf = new JTextField("请输入账号",20);//new JTextField(文本,宽度20)
        System.out.println(jtf.getText());
        jp.add(jLabel);//添加标签
        jp.add(jtf);//添加文本框
        //jtf.setText("xjaggacgav");//设置文本框内容
        //jtf.setEditable(false);//不可编辑文本框

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo5 f = new FrameDemo5();
        f.createFrame();
    }
}

单行文本(JTextField)

JTextField的构造函数:

JTextField()

JTextField(String text )

JTextField(int columns)

JTextField(String text, int columns)

方法:

void setText(String text)

设置文本框中的文本

String getText()

获得文本框中的文本

void setEditable(boolean b) 设置文本框是否可以编辑

void setVisible(boolean b)

设置文本框是否为可见

setColumns(20); 设置列数


import javax.swing.*;
import java.awt.*;


public class FrameDemo5 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //流式布局
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
        this.add(jp);//this 表示窗口
        JLabel jLabel = new JLabel("账号");
        jLabel.setFont(new Font("正楷",Font.ITALIC,20));
        //单行输入文本框
        JTextField jtf = new JTextField("请输入账号",20);//new JTextField(文本,宽度20)
        System.out.println(jtf.getText());
        jp.add(jLabel);//添加标签
        jp.add(jtf);//添加文本框
        //jtf.setText("xjaggacgav");//设置文本框内容
        //jtf.setEditable(false);//不可编辑文本框

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo5 f = new FrameDemo5();
        f.createFrame();
    }
}
多行文本框(JTextArea)

构造函数:

JTextArea()

创建一个空的文本域

JTextArea(String text)

用指定文本初始化文本域

JTextArea(int rows, int columns) 创建一个指定行数和列数的空文本域

JTextArea(String text,int rows, int columns)

创建一个带文本,并指行数和列数的

方法:

void setText(String text) 设置文本域中的文本

String getText() 获得文本域中的文本

void setFont(Font font) 设置文本域中文本的字体

void setLineWrap(boolean wrap) //是否自动换行,默认false

void setWrapStyleWord(boolean word) //是否以单词边界换行,默认false。

如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中:

JScrollPane scrollPane = new JScrollPane(txtArea);

add(scrollPane );


import javax.swing.*;
import java.awt.*;


public class FrameDemo6 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //流式布局
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
        this.add(jp);//this 表示窗口
        JLabel jLabel = new JLabel("备注");
        jLabel.setFont(new Font("正楷", Font.BOLD, 20));
        //多行文本输入框
        JTextArea jta = new JTextArea(6, 20);//new JTextArea(行6,列20);
        JScrollPane jsp = new JScrollPane(jta);
        jp.add(jLabel);
        jta.setLineWrap(true);//强制换行
        jta.setWrapStyleWord(true);//英文单词换行

        jp.add(jsp);


        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo6 f = new FrameDemo6();
        f.createFrame();
    }
}

密码框(JPasswordField)

构造函数:

JPasswordField()

JPasswordField(String text)

JPasswordField(String text, int columns)

方法:

char[] getPassword()

按钮(JButton)

构造方法:

JLabel(String text)

创建一个带文本的标签

JLabel(Icon image)

创建一个带图像的标签

方法:

void setText(String text)

设置按钮上的文本

String getText()

获得按钮上的文本

void setBackground(Color bg) 设置按钮的背景色

Color getBackground()

获得按钮的背景色

void setEnabled(boolean b)

设置启用(或禁用)按钮,由参数b决定

void setVisible(boolean b)

设置按钮是否为可见,由参数b决定

void setToolTipText(String text)

设置按钮的悬停提示信息

import javax.swing.*;
import java.awt.*;


public class FrameDemo7 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        //流式布局
        JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
        this.add(jp);//this 表示窗口
        JLabel jLabel = new JLabel("密码");
        jLabel.setFont(new Font("正楷", Font.BOLD, 20));
       //密码框
        JPasswordField jpf = new JPasswordField("123456",15);
        //获取密码框输入的内容
        char[] arrays = jpf.getPassword();
        String pwd = new String(arrays);
        System.out.println(arrays);
        JButton jb = new JButton("登录");
        jb.setToolTipText("点击登录");//jb.setToolTipText("提示信息");
        jb.setEnabled(false);//禁用按钮
        jp.add(jLabel);
        jp.add(jpf);
        jp.add(jb);



        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo7 f = new FrameDemo7();
        f.createFrame();
    }
}

菜单栏组件

菜单栏组件:

构造方法:JMenuBar();

方法:add(menu); 向菜单栏添加菜单

菜单组件:

构造方法:JMenu(“菜单名称");

方法:add(menuItem); 向菜单添加菜单选项

菜单项组件:

构造方法:JMenuItem(“菜单项名称");

将菜单栏添加到窗口

setJMenuBar(menuBar)


import javax.swing.*;
import java.awt.*;


public class FrameDemo8 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //创建菜单栏
        JMenuBar jb = new JMenuBar();
        //创建菜单
        JMenu jm1 = new JMenu("文件");
        JMenu jm2 = new JMenu("编辑");
        JMenu jm3 = new JMenu("帮助");
        jb.add(jm1);
        jb.add(jm2);
        jb.add(jm3);
        //创建菜单项
        JMenuItem ji1 = new JMenuItem("新建");
        JMenuItem ji2 = new JMenuItem("打开");
        JMenuItem ji3 = new JMenuItem("复制");
        JMenuItem ji4 = new JMenuItem("剪切");
        JMenuItem ji5 = new JMenuItem("关于我们");
        jm1.add(ji1);
        jm1.add(ji2);
        jm2.add(ji3);
        jm2.add(ji4);
        jm3.add(ji5);

        this.setJMenuBar(jb);



        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo8 f = new FrameDemo8();
        f.createFrame();
    }
}

事件处理

● 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前

为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任

何实际的功能,要实现相应的功能,必须进行事件处理;

● 用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输

入一个字符、点击鼠标等等;

● Java中,事件处理的基本思路如下:

● 一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,

监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听

器将处理这些事件;

● 一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通

知。


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class FrameDemo1 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        JPanel jp = new JPanel();
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.ORANGE);//添加背景颜色
        JLabel jLabel = new JLabel("账号");
        JTextField jtf = new JTextField(20);
        JButton jb = new JButton("注册");

        jb.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String msg = jtf.getText();
                if(msg.length()==0){
                    System.out.println("账号不能为空");
                }else if(msg.length()<11){
                    System.out.println("账号输入正确");
                }else {

                    System.out.println("账号长度不能超过11");
                }
            }
        });
        jp.add(jLabel);
        jp.add(jtf);


        jp.add(jb);


        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo1 f = new FrameDemo1();
        f.createFrame();
    }
}

对话框

JOptionPane对话框

showMessageDialog():消息对话框

主要有五种消息类型,类型不同,图标不同:

ERROR_MESSAGE 错误消息提示

INFORMATION_MESSAGE 信息提示

WARNING_MESSAGE 警告提示

QUESTION_MESSAGE 问题提示

PLAIN_MESSAGE 简洁提示

showConfirmDialog():确认对话框

主要有四种消息类型,类型不同,图标不同:

DEFAULT_OPTION 默认选项

YES_NO_OPTION 是/否选项

YES_NO_CANCEL_OPTION 是/否/取消选项

OK_CANCEL_OPTION 确定/取消


import javax.swing.*;
import java.awt.event.ActionEvent;


public class FrameDemo3 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //创建菜单栏
        JMenuBar jb = new JMenuBar();
        //创建菜单
        JMenu jm1 = new JMenu("文件");
        JMenu jm2 = new JMenu("编辑");
        JMenu jm3 = new JMenu("帮助");
        jb.add(jm1);
        jb.add(jm2);
        jb.add(jm3);

        //创建菜单项
        JMenuItem ji1 = new JMenuItem("新建");
        JMenuItem ji2 = new JMenuItem("打开");
        JMenuItem ji3 = new JMenuItem("复制");
        JMenuItem ji4 = new JMenuItem("剪切");
        JMenuItem ji5 = new JMenuItem("退出");
        ji5.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //确定-0,取消-2
               //int res =  JOptionPane.showConfirmDialog(null,"您确定要退出吗?","提示信息",JOptionPane.OK_CANCEL_OPTION);
                //是-0,否-1,取消-2
                int res =  JOptionPane.showConfirmDialog(null,"您确定要退出吗?","提示信息",JOptionPane.YES_NO_CANCEL_OPTION);
                System.out.println(res);
               if(res==0){
                   dispose();
               }
            }
        });
        jm1.add(ji1);
        jm1.add(ji2);
        jm2.add(ji3);
        jm2.add(ji4);
        jm3.add(ji5);
        this.setJMenuBar(jb);

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo3 f = new FrameDemo3();
        f.createFrame();
    }
}

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class FrameDemo4 extends JFrame {

    public void createFrame() {

        this.setSize(500, 500);//设置宽高

        this.setResizable(false);//不能设置窗口大小
        this.setLocationRelativeTo(null);//设置窗口居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项,设置关闭退出
        this.setTitle("我的第一个窗口");//设置标题
        this.setIconImage(new ImageIcon("E:/无标题.png").getImage());


        //在窗口中添加面板
        JPanel jp = new JPanel();
        this.add(jp);//this 表示窗口
        jp.setBackground(Color.blue);//添加背景颜色

        JTextField jtf = new JTextField(20);//文本框
        JButton jb = new JButton("请使劲按我");//按钮
        jb.setBackground(Color.red);
        jtf.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("键盘按下"+e.getKeyCode());//获取键盘按键编码e.getKeyCode()
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("键盘抬起");
            }
        });
        jb.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("鼠标点击事件");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("鼠标按下事件");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标抬起事件");
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标移入事件");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("鼠标移出事件");
            }
        });
        jp.add(jtf);
        jp.add(jb);

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo4 f = new FrameDemo4();
        f.createFrame();
    }
}

内部类

什么是内部类

把类定义在另一个类的内部,该类就被称为内部类。

jb.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("鼠标点击事件");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("鼠标按下事件");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标抬起事件");
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标移入事件");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("鼠标移出事件");
            }
        });
        jp.add(jtf);
        jp.add(jb);

        this.setVisible(true);//显示窗口,必须放在最下面


    }

    public static void main(String[] args) {
        FrameDemo4 f = new FrameDemo4();
        f.createFrame();
    }
}

内部类

什么是内部类

把类定义在另一个类的内部,该类就被称为内部类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值