• 翻阅必备----Java窗口组件,容器,布局,监听,事件 API大全



    在这里插入图片描述

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

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

    本文由 秩沅 原创

    收录于专栏 java

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

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



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


    👨‍💻联系图


    在这里插入图片描述


    👨‍💻组件


    (1)JTextField --文本框

     输入单行文本
    
    • 1

    (2)JTextArea–文本区

    输入多行文本
    
    • 1

    (3)JButton–按钮

    单击按钮
    
    • 1

    (4)JLable–标签

    提供提示信息
    
    • 1

    (5)JChexkBox–复选框

    提供多项选择
    
    • 1

    (6)JCombobox—下拉列表

    下拉列表
    
    • 1

    (7)JPasswordField --密码框

    输入密码
    
    • 1

    👨‍💻容器


    (0)JFrame–底层容器

    英文记忆 :Frame 框架

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

    (1)JPanel–面板容器

    英文记忆 :Panel 面板

    默认布局为FlowLayout布局
    
    • 1

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

    英文记忆 :Tabbel 选择

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

    (3)JScrollPane—滚动窗格容器

    英文记忆 :Scroll 滚动

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

    (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决定拆分线移动时组件是否发生连续变化
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    英文记忆 :Layered 分层

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

    👨‍💻布局


    (1)FlowLayout布局

    英文记忆 :flow 跟随,顺从

    是JPanel(面板)的默认布局 ,特点:对象居中对齐,先后顺序,从左到右排列
    
    使用FlowLAyout的容器 , 要改变组件大小的方法,如容器中的按钮组件:
    
    button.setPreferredSize(   new Dimension (  长  , 宽  )   )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)BorderLayout布局

    英文记忆 :Border 边界

    将区域划分 东 西 南 北 中 五个区域
    
    如使用BorderLayout布局的容器con ,添加组件b 到北方区域
    方法 :       con.add(  b , BorderLayout .  NORTH ) ;
    静态常量:
    EAST
    WEST
    SOUTH
    NORTH
    CENTER
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (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 的组件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4)GridLayout布局

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

    (5)NULL布局

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

       方法:  p.setLayout(  null ) ;
             
       组件. setBounds( int a  , int b , int width ,int height );
           a  b 代表组件的位置 
           width height代表组建的长和宽
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二,事件与监听

    👨‍💻事件👍


    (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);
    					
    			}
    		}
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    👨‍💻运行结果👍

    在这里插入图片描述

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

    你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/c8582202d201458587aa01b6da912480.png#pic_center
    在这里插入图片描述

  • 相关阅读:
    linux下创建文件夹软链接
    目前有哪些比较好用的CRM客户关系管理系统?
    【LeetCode刷题】1两数之和
    企业如何搭建智能客服系统?
    linux进行rbash逃逸的方法
    (附源码)ssm微课堂知识考核系统 毕业设计 141147
    Java 8 集合 Stream
    Spring学习总结一
    nodejs使用kafka
    ToBeWritten之改进威胁猎杀:自动化关键角色与成功沟通经验
  • 原文地址:https://blog.csdn.net/m0_64128218/article/details/127960282