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

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja