翻阅必备,一看必知——Java -GUI界面设计(容器,布局,监听,事件 API大全

简介: 翻阅必备,一看必知——Java -GUI界面设计(容器,布局,监听,事件 API大全

在这里插入图片描述

👨‍💻个人主页@元宇宙-秩沅

**hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!**

本文由 秩沅 原创

收录于专栏 java

⭐Java窗口组件以及事件处理⭐
-

相关文章参考:我把皮小浪の的 蓝色妖姬系列做进了java窗口


@[TOC]


一,==常用组件,容器和布局==


👨‍💻联系图


在这里插入图片描述


👨‍💻组件


(1)JTextField --文本框

 输入单行文本

(2)JTextArea--文本区

输入多行文本

(3)JButton--按钮

单击按钮

(4)JLable--标签

提供提示信息

(5)JChexkBox--复选框

提供多项选择

(6)JCombobox---下拉列表

下拉列表

(7)JPasswordField --密码框

输入密码

👨‍💻容器


(0)JFrame--底层容器

英文记忆 :Frame 框架

 Frame是窗口,窗口也是容器,下面的容器都称为为中间容器 

(1)JPanel--面板容器

英文记忆 :Panel 面板

默认布局为FlowLayout布局

(2)JTabbedPane --选项卡窗格容器

英文记忆 :Tabbel 选择

可作为中间容器,添加组件后课自动指定选项卡
1. 静态方法: add(  strng a  , Component c ) -----添加组件
2. 构造方法:public JTabbedPane( int  tabPlacement )   ---  tabPlacement 决定选项卡的位置

(3)JScrollPane---滚动窗格容器

英文记忆 :Scroll 滚动

只可以添加一个组件,通过滚动条来观看该组件
    一般将JTextArea 文本区 放到滚动窗格中
    JScrollPane scroll = new JScrollPane ( new  JtextArea ( ) );

(4)JSplitPane---拆分窗格容器

英文记忆 :Split 分离

被分成两部分的容器: 水平拆分窗格 ,垂直拆分窗格
1.静态常量:
水平拆分 :HORIZONTAL_SPLIT
垂直拆分:VERTICAL_SPLIT
2. 构造方法:
JSplitPane( int a , Component b ,  Component c )
JSplitPane( int a ,boolean d , Component b ,  Component c )
3,解释
参数a 填上面的两个静态常量来决定水平或垂直拆分
参数d决定拆分线移动时组件是否发生连续变化

(5)JLayeredPane----分层窗格

英文记忆 :Layered 分层

 可将需要处理重叠问题的组件添加到分层窗格中,分窗格分为五层
 1.静态方法:  add( JComponent com , int layer )
 2.解释 :     参数layer 填:
 DEFAULT_LAYER   第一层
 PALETTE_LAYER   第二层
 MODAL_LAYER     第三层
 POPUP_LAYER     第四层
 DRAG_LAYER      第五层

👨‍💻布局


(1)FlowLayout布局

英文记忆 :flow 跟随,顺从

是JPanel(面板)的默认布局 ,特点:对象居中对齐,先后顺序,从左到右排列

使用FlowLAyout的容器 , 要改变组件大小的方法,如容器中的按钮组件:

button.setPreferredSize(   new Dimension (  长  , 宽  )   )

(2)BorderLayout布局

英文记忆 :Border 边界

将区域划分 东 西 南 北 中 五个区域

如使用BorderLayout布局的容器con ,添加组件b 到北方区域
方法 :       con.add(  b , BorderLayout .  NORTH ) ;
静态常量:
EAST
WEST
SOUTH
NORTH
CENTER

(3)CardLayout布局

英文记忆 :card 卡片

叠扑克牌布局 , 点击组件,同一时刻只能 显示一个
  如:布局设置在容器con设置方法
(1)CardLayout card = new  CardLayout();
(2)con .setLayout(    card  ) ; //设置布局
(3)con.add( String a  , Component b ) ;  //添加组件进入设置好布局的容器
(4)card.show( con , string a ); //显示容器中名字为a 的组件

(4)GridLayout布局

 英文记忆 :Grid 网格
    GridLayout是使用较多的布局编辑器,将组件划到网格中

(5)NULL布局

可以DIY随意组件的位置 ,例如:p是个容器

   方法:  p.setLayout(  null ) ;

   组件. setBounds( int a  , int b , int width ,int height );
       a  b 代表组件的位置 
       width height代表组建的长和宽

二,==事件与监听==

👨‍💻事件👍


(1)DocumentEvent事件


1,事件源

和文本区有关的事件,通过get.Document()返回所维护的文档

2.注册监视器

(xx.getDocument()).addDocummentListener( DocumentListen YY );

3,接口中的方法
方法|描述
-------|--------
public void changedUpDate() | 发出属性或属性集已更改的通知
public void removeUpDate() | 通知文档有删除

public void insertUpDate() | 通知文档有插入)

(2) ActionEvent事件


1.事件源

文本框,按钮,菜单项,密码框和单选按钮都可触发该事件

2.注册监视器

XX.addActionListener( ActionListener YY)

3,接口中的方法
方法|描述
-------|--------
public void actionPerformed( ActionEvent e )| 对发生的事件进行处理

4.ActionEvent类中的方法
方法|描述
-------|--------
public Object getSourse( ) | 可以获取发生ActionEvent事件的事件源对象的引用

public String getActionCommand()| 获取发生ActionEvent事件时和该事件相关的一个“命令”字符串,默认为文本框的文本

(3)MouseEvent事件


1.事件源

MouseListener可以处理5种操作触发的鼠标事件:
(1)事件源上按下鼠标键
(2)事件源上释放鼠标键
(3)事件源上单击鼠标
(4)鼠标进入事件源
(5)鼠标退出事件源头

2.注册监视器

xx.addMouseMOtionLIstener( MouseMotionListener YY)

3.MouseListener接口中的方法

方法 描述
mousePressed(MouseEvent) 负责处理在组件按下鼠标键触发的鼠标事件
mouseReleased(MouseEvent) 负责处理在组件释放鼠标键触发的鼠标事件
mouseEntered(MouseEvent) 负责处理在组件进入鼠标键触发的鼠标事件
mouseExited(MouseEvent) 负责处理在组件离开鼠标键触发的鼠标事件
mouseClicked(MouseEvent) 负责处理在组件单击鼠标键触发的鼠标事件

4.MouseMotionListener 接口中的方法

方法 描述
mouseDragged(MouseEvent) 负责处理拖动鼠标触发的鼠标事件
mouseMoved(MouseEvent ) 负责处理映移动鼠标触发的鼠标事件

5.MouseEvent 类的方法
方法|描述
-------|--------
getX()|获取鼠标指针在事件源坐标系中的X坐标
getY()|获取鼠标指针在事件源坐标系中的Y坐标
getButoon()|获取鼠标的键: 左键 BUTTON1 ,中键 BUTTON2 ,右键 BUTTON3
getClickCount()| 鼠标被单击的次数

getsource()|获取发生鼠标事件的事件源

(4)KeyEvent事件


1.事件源

当按下,释放或敲击键盘上的一个键时就触发了键盘事件

2.注册监视器

xx.addKeyListener(KeyListener YY )

3.KeyListener接口方法
方法|描述
-------|--------
public void keyPressed(KeyEvent e )|处理按下键时的事件
public void keyTyped(KeyEvent e )|处理键入时的事件
public void keyReleased(KeyEvent e )|处理释放键时的事件

4.KeyEvent类方法
方法|描述
-------|--------
public int getKeyCode( )|判断哪个键被按下,敲击或释放
public int getKeyChar( )|判断哪个键被按下,敲击或释放而后返回键上的字符

5,键码表
在这里插入图片描述


(5)windowEvent事件


1.windowEvent类方法
—————————==设置窗口关闭的方式 的方法==———————————— setDefaultCloseOperation( int operation)的 参数常量如下| 常量描述
-------|--------
DO_NOTHTING_ON_CLOSE | 什么也不做
HIDE_ON_CLOSE| 隐藏当前窗口
DISPOSE_ON_CLOASE|隐藏当前窗口并且释放当前窗口占有的其他资源
EXIT_ON_CLOSE|结束窗口所在的应用程序

2.WindowListener接口的方法
方法|描述
-------|--------
public void windowActivated( windowEvent e )| 当窗口从非激活状态到激活状态时
public void windowDeactivated( windowEvent e )| 当窗口从激活状态到非激活状态时
public void windowClosing windowEvent e )| 当窗口正在关闭时
public void windowClosed windowEvent e )| 当窗口关闭后
public void windowOpened windowEvent e )| 当窗口打开时
public void windowIconified windowEvent e )| 当窗口图标化时
public void windowDeiconified windowEvent e )| 当窗口撤销图标化时

三,==典例解析==

👨‍💻例题👍

  • 实现一个标题为计算的窗口,窗口的布局为follow layout布局,
    在窗口中添加两个文本区,当用户在一个文本区中输入若干个数时,
    另一个文本区对输入的数进行求和运算并求出平均值,
    也就是说随着用户输入的变化,另一个文本区不断的更新求和及平均值。

👨‍💻上代码👍


package jiemian;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class Man {
   
   
        public static void main(String[] args) {
   
   
         window w1 = new window("计算",450,450,450,450);
        }
    }
 @SuppressWarnings("serial")
class window extends JFrame implements DocumentListener{
   
   

            JTextArea t1 ,t2 ;         //JTextArea -文本区组件
            double sum=0 ,avg = 0;    //求和 和 平均值 的变量
            window(String A ,int a ,int b ,int c ,int d){
   
   
                  setTitle(A);
                  setBounds(a,b,c,d);
        //JPanel MB = new JPanel();  //创建一个面板容器
                  FlowLayout ron = new FlowLayout();
                  setLayout(ron);    //设置一个FlowLayout的布局
                  t1 = new JTextArea(5 , 10 ) ;
      // 第一个参数为可见行数 ,第二个参数为可见列数
                  t2 = new JTextArea(5 , 10 ) ;
                  t2.setEditable(false);   //将文本区t2设置为不可编辑
                  add(t1);
                  add(t2);
      //激活文档监听器
                  ( t1.getDocument()).addDocumentListener(this);
                  setVisible(true);   //设置为可见
                  validate();         //确保组件具有有效的布局
                  setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            }
     //重写接口方法
            @Override           //发出文档有更改的通知
            public void changedUpdate(DocumentEvent e) {
   
   
            // TODO Auto-generated method stub    

            String a = t1.getText(); ;
            sum = 0 ; avg =0 ;

            //除了123456789以外的字符和+ 为分隔符分离一个字符串。
            String [] s = a.split("[^123456789+]");
            for(int i = 0 ; i <s.length ;i++)
            {
   
   
                try{
   
   sum += Double.parseDouble(s[i]);}
                catch( Exception ee ) {
   
   }
            }
            avg = sum / s.length ;
            t2.setText(null);
             t2.append("数值的和为"+sum);   //append 是追加的意思
             t2.append("\n数值的平均值为"+avg);   
            }
            @Override
            public void removeUpdate(DocumentEvent e) {
   
   
                changedUpdate(e);
            }
            @Override
            public void insertUpdate(DocumentEvent e) {
   
   
                  changedUpdate(e);

            }
        }

👨‍💻运行结果👍

在这里插入图片描述

相关文章参考:我把皮小浪の的 蓝色妖姬系列做进了java窗口

你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!
在这里插入图片描述

目录
相关文章
|
7月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
566 8
|
7月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
214 1
|
11月前
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
250 0
|
11月前
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
204 0
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
475 3
|
JavaScript 前端开发 Java
【Java进阶】详解JavaScript事件
总的来说,JavaScript事件是JavaScript交互设计的核心,理解和掌握JavaScript事件对于编写高效、响应式的网页应用至关重要。
251 15
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
336 2
Java容器及其常用方法汇总
|
Java Android开发 开发者
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
380 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
356 1