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

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.