Javase8 GUI编程 内部类 常用知识整理

2023-11-02 15:20

本文主要是介绍Javase8 GUI编程 内部类 常用知识整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

描述Swing和容器组件

常用容器

 GUI布局管理

常用组件 

事件处理

对话框

内部类

什么是内部类?

内部类都有哪些

内部类的特点


GUI(Graphical User Interfase)图形用户界面。

        图形用户界面是一种人与计算机互动的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。

描述Swing和容器组件

Swing是java组件,里面大部分组件类位于javax.swing包中。

java图形界面基本组合是组件,组件是一个以图形展示并且能与用户交互的对象。

组件不能独立显示出来,必须放在容器中,一个容器可以容纳多个组件,通过容器.add()方法添加组件。

常用容器

常用容器:窗口Frame和面板Panel

JFrame 在Swing程序中创建窗体;

JFrame 构造方法:

JFrame() 窗体初始不可见,无参

JFrame(String title)窗体初始不可见,有参,可以设置title标题

Jpanel 提供面板

面板中也可以添加其他组件,亦可以设置布局,还可布局嵌套

Jpanel ()  创建一个空面板

Jpanel (LayoutManager layout)   创建一个空面板,且有指定布局

常用方法:

        this.setTitle("标题");//窗口标题this.setSize(500, 500);//设置窗口大小this.setLocation(300, 500);//设置窗口位置(坐标)this.setLocationRelativeTo(null);//设置窗口相对显示器居中this.setResizable(false);//禁止设置窗口大小this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口this.add(jButton);//添加方法this.setVisible(true);//显示窗口jLabel.setFont(new Font("楷体", Font.BOLD,20));//设置字体 楷体 加黑 大小20jPanel.setBackground(new Color(170, 165, 130));//设置颜色JTextArea jTextArea = new JTextArea(31,65);JScrollPane jScrollPane = new JScrollPane(jTextArea);//设置多行文本滚动条

 GUI布局管理

在Java中,每个jpanel都有一个布局管理器对象,并且在布局管理上,采用容器和布局管理相分离的方案,Java中有几种常用的布局管理器,分别是:流式布局FlowLayout , 边界布局BorderLayout, 网格布局GridLayout。

 (1)流式布局FlowLayout

          这个布局会将组件按从左到右,从上到下的顺序来安排,并默认居放置,FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行,不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。

new FlowLayout(FlowLayout.RIGHT,20,40);
//右对齐,组件之间水平间距20个像素,垂直间距40个像素。
this.add(new Button("确定"));//添加按钮

(2) 边界布局BorderLayout

           BorderLayout 布局管理器只允许在容器内放置 5 个组件,这 5 个组件的位置是 BorderLayout 类中的North、 South East West Center5个常量来确定的,他们的 大小都是可以改变的。一般情况下中间区域较大,而且可以只用其中几 个区域。
BorderLayout 将整个容器的布局划分成东( EAST )西( WEST )南( SOUTH )北( NORTH )中 (CENTER )五个区域,组件只能被添加到指定的区域。
this.add(new Button(“按钮”) ,BorderLayout.NORTH); //将按钮添加到上面的区域里
this.add(new Button(“按钮”) ,BorderLayout.CENTER);//将按钮添加到中间的区域里
如不指定组件的加入部位,则默认加入到 CENTER 区。
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
BorderLayout 型布局容器尺寸缩放原则:
北、南两个区域在水平方向缩放。
东、西两个区域在垂直方向缩放。
中部可在两个方向上缩放。

(3) 网格布局GridLayout

          网格布局中是一块一块大小相等的网格,组件会放置在网格中,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的 大小和创建网格的多少来确定的。

this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格this.add(new Button(“按钮”));//添加按钮
当组件数目大于网格数时, GridLayout 保持行数不变而自动增加列数。
● GridLayout 型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。
组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
GridLayout 构造方法中指定分割的行数和列数

常用组件 

标签(JLabel)  标签是容纳文本和图标的控件

JLabel jLabel = new JLabel("账  号");//创建标签&内容可为空
jLabel.setText();//设置标签内容
String s1 = jLabel.getText();//获取标签内容

单行文本框(JTextField)

JTextField jTextField = new JTextField(15);//设置单行文本框&可设置标题和列数
jPanel1.add(jTextField);//添加文本框到面板
jTextField.setText(String text); //设置内容
String s = jTextField.getText(); //获得内容 
jTextField.setFont(new Font(“宋体”,Font.BOLD, 18)); //设置字体

多行文本框(JTextArea)

JTextArea jTextArea = new JTextArea(31,65);//设置多行文本域JScrollPane jScrollPane = new JScrollPane(jTextArea);//设置多行文本滚动条
jTextArea.setText(String text); //设置内容
String s = jTextArea.getText(); //获得内容 
void setEditable(boolean b);// 设置文本框是否可以编辑
jTextArea.setFont(new Font(“宋体”,Font.BOLD, 18)); //设置字体

密码框(JPasswordField)

JPasswordField jPasswordField = new JPasswordField(15);//新建密码框
String s2 = jPasswordField.getPassword();//获取密码

按钮(JButton)

JButton jButton1 = new JButton("登录");//新建“登录”按钮
jButton1.setBackground(color);//设置按钮颜色
jButton1.setToolTipText("");//按钮悬停信息提示

菜单栏组件JMenuBar()    菜单组件JMenu(“菜单名称”)    菜单项组件JMenuItem(“菜单项名称”)

事件处理

       事件处理对采用了图形用户界面的程序来说是非常重要的,图形界面要想实现功能,必须进行事件处理。

Java中,事件处理的基本思路如下:
一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件;
一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知。
通俗举例:以按钮为例  按钮是事件源 监听器是 ActionListener。
添加事件监听器(此处为匿名类) 
按钮对象.addActionListener(new ActionListener() { // 事件处理 
@Override public void actionPerformed(ActionEvent e) {  ...执行操作...
} });
 JButton jButton2 = new JButton("取消");jButton2.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {jPasswordField.setText(null);//点击取消则置密码框内容为空}});

还有键盘监听  addKeyListener

对话框

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 确定 / 取消
 jButton1.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {//鼠标按压事件String s1 = jTextField.getText();String s2 = jPasswordField.getText();if (s1.length() == 0 || s2.length() == 0) {JOptionPane.showMessageDialog(null, "账号密码不能为空", "错误", JOptionPane.WARNING_MESSAGE);}boolean b1 = s1.matches("([a-z]*[0-9]*)+");//正则表达式boolean b2 = s2.matches("([a-z]*[0-9]*)+");if (!b1 | !b2) {JOptionPane.showMessageDialog(null, "账号密码只能由数字,字母组成", "错误", JOptionPane.WARNING_MESSAGE);}if(s1.equals("w123456") && s2.equals("w123456")){dispose();//关闭窗口new ChatWindow();//打开聊天界面}else JOptionPane.showMessageDialog(null, "账号或密码错误", "错误", JOptionPane.WARNING_MESSAGE);}});

内部类

什么是内部类?

把类定义在另一个类的内部,该类就被称为内部类。
如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。

       将只在本类中使用的功能定义在内部类中,实现封装,在哪儿用就在那创建,内部类可使用外部类成员 

内部类都有哪些

内部类一般来说包括这四种:
成员内部类
成员内部类 —— 就是位于外部类成员位置的类
特点:可以使用外部类中所有的成员变量和成员方法(包括 private 的)
        如果我们的内部类不想轻易被任何人访问,可以选择使用 private 修饰内部类,这样我们就无法通过创建对象的方法来访问,想要访问只需要在外部类中定义一个public修饰的方法,间接调用。这样做的好处就是,我们可以在这个 public 方法中增加一些判断语句,起到数据安全的作用。
静态内部类
被static修饰的内部类, 按位置分,属于成员内部类,但也可以称作静态内 部类,也常叫做嵌套内部类, 不能使用外部类的非 static 成员变量和成员方法。
局部内部类
局部内部类 —— 就是定义在一个方法或者一个作用域里面的类
特点:主要是作用域发生了变化,只能在自身所在方法和属性中被使用
匿名内部类
匿名内部类没有名字,是内部类简化的写法

内部类的特点

内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class 文件,但是前面冠以外部类的类名和 $ 符号。
内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为 private 的。
内部类声明成静态的,就不能随便访问外部类的成员变量,仍然是只能访问外部类的静态成员变量

内部类作用

1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类解决了多继承。 
2.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏,封装性好。   
3.方便编写事件驱动程序和线程代码。
 

这篇关于Javase8 GUI编程 内部类 常用知识整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/331509

相关文章

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器