Java基础-JLable组件、文本框组件、JPanel轻量级容器、Swing事件处理三种方式、适配器

article/2025/9/12 8:54:28

1、JLable标签组件

    标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类,该类的主要构造方法有如下几种形式。

  • JLabel():创建无图像并且标题为空字符串的 JLabel。
  • JLabel(Icon image):创建具有指定图像的 JLabel。
  • JLabel(String text):创建具有指定文本的 JLabel。
  • JLabel(String textjcon image,int horizontalAlignment):创建具有指定文本、图像和水平对齐方式的 JLabel,horizontalAlignment 的取值有 3 个,即 JLabel.LEFT、JLabel.RIGHT 和 JLabel.CENTER。
表1 JLabel类的常用方法
方法名称说明
void setText(Stxing text)定义 JLabel 将要显示的单行文本
void setIcon(Icon image)定义 JLabel 将要显示的图标
void setIconTextGap(int iconTextGap)如果 JLabel 同时显示图标和文本,则此属性定义它们之间的间隔
void setHorizontalTextPosition(int textPosition)设置 JLabel 的文本相对其图像的水平位置
void setHorizontalAlignment(int alignment)设置标签内容沿 X 轴的对齐方式
int getText()返回 JLabel 所显示的文本字符串
Icon getIcon()返回 JLabel 显示的图形图像
Component getLabelFor()获得将 JLabel 添加到的组件
int getIconTextGap()返回此标签中显示的文本和图标之间的间隔量
int getHorizontalTextPosition()返回 JLabel 的文本相对其图像的水平位置
int getHorizontalAlignment()返回 JLabel 沿 X 轴的对齐方式

public static void main(String[] args) {
        // TODO Auto-generated method stub
            JFrame jf = new JFrame();
            JLabel jl = new JLabel("中国心",JLabel.CENTER); // JLable组件,JLabel(String text, int horizontalAlignment对齐方式)
            
            jf.setSize(500, 200);
            
            jf.add(jl); // JLable组件加入到容器中
            jf.setVisible(true);
            jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

2、文本框组件

1)JTextField文本框-单行文本框

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("单行文本框测试");
        jf.setLayout(new GridLayout(3,4,5,5));
        JLabel jl1 = new JLabel("中国心",JLabel.CENTER); // JLable组件,JLabel(String text, int horizontalAlignment对齐方式)

        
        JTextField jtf = new JTextField();
        
        jf.setSize(500, 200);
        
        jf.add(jl1); // JLable组件加入到容器中

        jf.add(jtf);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

2)JPasswordField密码框

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("单行文本框测试");
        jf.setLayout(new GridLayout(3,4,5,5));
        JLabel jl1 = new JLabel("用户名:"); // JLable组件,JLabel(String text, int horizontalAlignment对齐方式)
        JLabel jl2 = new JLabel("密码:");
        JPasswordField jpf = new JPasswordField();
        JTextField jtf = new JTextField();
        
        jf.setSize(500, 200);
        
        jf.add(jl1); // JLable组件加入到容器中

        jf.add(jtf);
        jf.add(jl2);
        jf.add(jpf);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

3)JTextArea文本域-多行文本框

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("单行文本框测试");
        jf.setLayout(new GridLayout(3,4,5,5));
        JLabel jl1 = new JLabel("用户名:"); // JLable组件,JLabel(String text, int horizontalAlignment对齐方式)
        JLabel jl2 = new JLabel("密码:");
        JPasswordField jpf = new JPasswordField();
        JTextField jtf = new JTextField();
        
        JTextArea jta = new JTextArea();
        jf.setSize(500, 200);
        
        jf.add(jl1); // JLable组件加入到容器中

        jf.add(jtf);
        jf.add(jl2);
        jf.add(jpf);
        jf.add(jta);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

3、JPanel轻量级容器

public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame();
        JPanel jp = new JPanel();
        jp.setBorder(new EmptyBorder(10,10,10,10));//设置边距
        jp.setLayout(new GridLayout(3,2,10,10));

    
        jf.add(jp); // JLable组件加入到容器中
        JLabel jl1 = new JLabel("用户名:"); // JLable组件,JLabel(String text, int horizontalAlignment对齐方式)
        JLabel jl2 = new JLabel("密码:");
        JPasswordField jpf = new JPasswordField();
        JTextField jtf = new JTextField();
        
        JTextArea jta = new JTextArea();
        
        JButton jb1 = new JButton("登录");
        JButton jb2 = new JButton("注册");
        jf.setSize(500, 200);

        jp.add(jl1);
        jp.add(jtf);
        jp.add(jl2);
        jp.add(jpf);
        
        jp.add(jb1);
        jp.add(jb2);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
        
    }

 

4 、Swing事件处理

在swing的事件处理中,可以使用ActionListener接口处理按钮的动作事件。

实现事件的三种方式:

1.实现一个ActionListener子类,再把按钮的事件响应委托给这个子类的实例处理.

2.让界面类实现ActionListener接口,再把事件响应委托给界面类.这种方式适合于处理一些短小简单或要求内聚的事件响应.

3.用匿名类实现ActionListener接口,再把事件委托给这个匿名类的实例.这种方式是Swing事件处理的主流.
 

1)实现一个ActionListener子类,再把按钮的事件响应委托给这个子类的实例处理.

JButton内部有一个listenerList的链表,点击按钮就产生一个ActionEvent事件,此后内部回调用listenerList中每一个actionListener子类实例的actionPerformed方法,事件进行了响应。

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

class JButtonListener implements ActionListener{  //触发事件
    public void actionPerformed(ActionEvent e) {
        System.out.print(e.getActionCommand());   //返回与此动作相关的命令字符串
        JOptionPane.showConfirmDialog(null, "触发状态");
    }
}

public class testEven{

    /**
     * @param args
     */

    public static void main(String[] args) {

        JFrame jf = new JFrame("测试");
        JButton jb = new JButton("确认");
        JButtonListener jbListener = new JButtonListener();  //添加事件监听
        jb.addActionListener(jbListener);
        jf.add(jb);
        
        jf.setSize(100, 200); //设置大小
        jf.setLocation(100, 100); //设置位置
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
        
    }
}

2 )让界面类实现ActionListener接口,再把事件响应委托给界面类.这种方式适合于处理一些短小简单或要求内聚的事件响应.

实现WindowListener接口,直接定义一个类,或者使用匿名类

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;

class MyWindowListener implements WindowListener{

    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口打开");
    }

    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口关闭");
    }

    public void windowClosed(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口被关闭。。。。");
    }

    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口最小化");
    }

    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口从最小化恢复");
    }

    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口被选中");
    }

    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.print("窗口选中被取消");
    }
    
}

public class testEvent2 {

    /**
     * @param args
     */
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("测试");
        MyWindowListener mwl = new MyWindowListener();
        jf.addWindowListener(mwl);

        jf.setSize(100, 400); //设置大小
        jf.setLocation(100, 100); //设置位置
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

}

3 ) 用匿名类实现ActionListener接口,再把事件委托给这个匿名类的实例.

public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("测试");
        //MyWindowListener mwl = new MyWindowListener();
        jf.addWindowListener(new WindowListener(){

            public void windowOpened(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口打开");
            }

            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口关闭");
            }

            public void windowClosed(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口被关闭。。。。");
            }

            public void windowIconified(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口最小化");
            }

            public void windowDeiconified(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口从最小化恢复");
            }

            public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口被选中");
            }

            public void windowDeactivated(WindowEvent e) {
                // TODO Auto-generated method stub
                System.out.print("窗口选中被取消");
            }
            
        });

        jf.setSize(100, 400); //设置大小
        jf.setLocation(100, 100); //设置位置
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

5、适配器

类适配器

对象适配
缺省适配器模式
1.使用一个适配器类Adapter 实现接口 实现接口中的所有方法
适配器类中的 方法空实现
2.用户类 再来继承适配器类
3.用户类 可以进行选择性重写

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;

class MyWindowListener extends WindowAdapter{  //abstract class抽象类
    public void windowOpened(WindowEvent e) {
          System.out.print("窗口关闭");
    }
      public void windowClosing(WindowEvent e) {
          super.windowClosing(e);
          System.out.print("窗口关闭");
          
      }
}

public class testEvent2 {

    /**
     * @param args
     */
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("测试");
        MyWindowListener mwl = new MyWindowListener();
        jf.addWindowListener(mwl);

        jf.setSize(100, 400); //设置大小
        jf.setLocation(100, 100); //设置位置
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    }

}

 

抽象类 和 接口的区别

1.使用方法
抽象类: 继承 extends
接口: 实现 implements
2.成员变量
抽象类: 变量 常量都可以有
接口: 接口中只能有常量 默认public static final 修饰
3.成员方法
抽象类: 抽象方法 成员方法都可以
接口: 只能有抽象方法(静态方法 和 默认方法)
4.构造方法
抽象类: 有构造方法
接口: 没有构造方法

类与类之间的关系:单继承 多层继承
类与接口的关系:单实现 和 多实现(用逗号隔开)

接口和 接口之间的关系
单继承 多继承(用逗号隔开)

6、综合小实例

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

 

public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame jf = new JFrame("测试");
        jf.setLayout(null);
        final JTextField jtf1 = new JTextField();
        final JTextField jtf2 = new JTextField();
        final JTextField jtf3 = new JTextField();
        //JLabel jLabel = new JLabel("+",JLabel.CENTER);
        String fuhao[] = {"+","-","*","/"};
        final JComboBox jcb = new JComboBox(fuhao);
        
        
        JButton jb = new JButton("=");
        jb.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String num1 = jtf1.getText();
                String num2 = jtf2.getText();
                String fuhao = (String) jcb.getSelectedItem();
                int result = 0;
                if("+".equals(fuhao)){
                    result = Integer.parseInt(num1)+Integer.parseInt(num2);
                    jtf3.setText(result+"");
                }else if("-".equals(fuhao)){
                    result = Integer.parseInt(num1)-Integer.parseInt(num2);
                    jtf3.setText(result+"");
                }else if("*".equals(fuhao)){
                    result = Integer.parseInt(num1)*Integer.parseInt(num2);
                    jtf3.setText(result+"");
                }else{
                    result = Integer.parseInt(num1)/Integer.parseInt(num2);
                    jtf3.setText(result+"");
                }
            
            }
            
        });
        
        jtf1.setBounds(20, 30, 50, 25);
        jcb.setBounds(80, 30, 40, 25);
        jtf2.setBounds(130, 30, 50, 25);
        jb.setBounds(190, 30, 50, 25);
        jtf3.setBounds(250, 30, 50, 25);
        
        jf.add(jtf1);
        jf.add(jcb);
        jf.add(jtf2);
        jf.add(jb);
        jf.add(jtf3);
        jf.setSize(500, 200); //设置大小
        jf.setLocation(100, 100); //设置位置
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
        
    }

}

JComboBox jcb = new JComboBox(fuhao);

下拉列表由 JComboBox 类实现,常用构造方法如下。

  • JComboBox():创建一个空的 JComboBox 对象。
  • JComboBox(ComboBoxModel aModel):创建一个 JComboBox,其选项取自现有的 ComboBoxModel。
  • JComboBox(Object[] items):创建包含指定数组中元素的 JComboBox。

JComboBox 类提供了多个成员方法用于操作下拉列表框中的项,如表 1 所示。
 

表1 JComboBox类的常用方法
方法名称说明
void addItem(Object anObject)将指定的对象作为选项添加到下拉列表框中
void insertItemAt(Object anObject,int index)在下拉列表框中的指定索引处插入项
void removeltem(0bject anObject)在下拉列表框中删除指定的对象项
void removeItemAt(int anlndex)在下拉列表框中删除指定位置的对象项
void removeAllItems()从下拉列表框中删除所有项
int getItemCount()返回下拉列表框中的项数
Object getItemAt(int index)获取指定索引的列表项,索引从 0 开始
int getSelectedIndex()获取当前选择的索引
Object getSelectedltem()获取当前选择的项

下面分析JComboBox的事件响应。程序中使用了3个不同的事件响应函数,他们具有不同的特性。

ActionListener:它在eclipse和netBeans两个不同的IDE中表现出了不同的效果- -。在eclipse中,每当选中新节点时被激活;而在netBeans中,选择新节点时它总会被激活两次。

PopupMenuListener:它将选择节点的过程细分为3种类型:下拉菜单弹出;下拉菜单合上;下拉菜单取消。当点开下拉菜单,然后放弃选择时,则下拉菜单取消、下拉菜单合上两个事件先后被激活。

ItemListener:将节点的事件分为2种类型:SELECTED和DESELECTED。对于每种事件,均可以调用getItem()方法来获取相应节点。

扫码关注一起随时随地学习!!!就在洋葱攻城狮,更多精彩,等你来!!

 


http://chatgpt.dhexx.cn/article/K1pwpXVH.shtml

相关文章

06.JavaSwing(基础组件——JLabel类)

软件界面是软件和用户之间的交流平台,而组件则是绘制软件界面的基本元素,是软件和用户之间的交流要素。 一、概述 JLabel组件用来显示文本和图像,可以只显示其一种,也可以同时显示。JLabel类提供了一些列用来设置标签的方法。 二…

从DTW到DILATE---时序预测损失函数总结

时间序列预测损失函数 时间序列预测是指通过分析历史数据来预测未来数据的变化趋势。时间序列预测在许多领域都有着广泛的应用,例如金融、气象、交通等。为了能够准确预测未来数据,时间序列预测中损失函数的选择非常关键。损失函数的选择直接影响模型的…

DTW算法——matlab实现(二)

DTW算法——Matlab实现 本文只是简单的介绍DTW算法的目的和实现。具体的DTW可以参考一下文献: 离散序列的一致性度量方法:动态时间规整(DTW) http://blog.csdn.net/liyuefeilong/article/details/45748399 动态时间归整/规整/弯曲…

【时间序列】DTW算法详解

作者 | 追光者 研究 | 机器学习与时间序列 出品 | AI蜗牛车 1.DTW 1.1 时序相似度 在时间序列数据中,一个常见的任务是比较两个序列的相似度,作为分类或聚类任务的基础。那么,时间序列的相似度应该如何计算呢? “ 经典的时间序列相…

学习dtw-python库内容 动态弯曲距离(DTW)具体实现

文章目录 一、install 数据包二、函数功能三、函数的参数以及含义四、具体实现 一、install 数据包 简单的pip install一下就好了,注意最后提示Successfully installed dtw-python-1.3.0 pip install dtw-python二、函数功能 执行 DTW 算法,并计算两个…

DTW距离

DTW(dynamic-time-wraping) 当两个时间序列等长时,我们可以使用欧氏距离来度量两者的相似性。但是当两个时间序列不等长时,欧氏距离就难以度量两者的相似性了。因此,国外学者提出了动态时间弯曲距离(Dynamic time war…

【时间序列】动态时间规整(DTW)算法简介(python)

简介 动态时间规整:(Dynamic Time Warping,DTW) 定义:用于比较不同长度的两个数组或时间序列之间的相似性或计算两者间的距离。 例1:a [1,2,3],b[3,2,2] 例2:a[1,2,3],b[2,2,2,3,4] 例1好计算,但对于例2&am…

【积】fast-DTW及其代码详解

fast-DTW 在解说中适合一个单特征的时间序列,在附录中修改了距离函数从而适合多个特征的时间序列。且距离函数用的是L1距离。如果是其他距离函数,修改即可。 1. DTW常用的加速手段 1.1 限制 亦即减少D的搜索空间,下图中阴影部分为实际的探…

DTW算法(语音识别)

DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的。这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后需…

时间序列匹配之dtw的python实现(一)

简介 Dynamic Time Warping(动态时间序列扭曲匹配,简称DTW)是时间序列分析的经典算法,用来比较两条时间序列之间的距离,发现最短路径。笔者在github上搜索dtw时发现了两个比较经典的库:dtw和dtw-python。d…

Python dtw(dynamic time warping)模块

dtw是一个用于计算动态时间扭曲距离的python模块。它可以作为时间序列之间的相似性度量。 dtw模块官方文档:https://www.cnpython.com/pypi/dtw DTW(dynamic time warping)的基本思想: 参考链接:https://zhuanlan.zhihu.com/p/117634492

时间序列相似性度量-DTW

1. 背景 最近项目中遇到求解时间序列相似性问题,这里序列也可以看成向量。在传统算法中,可以用余弦相似度和pearson相关系数来描述两个序列的相似度。但是时间序列比较特殊,可能存在两个问题: 两段时间序列长度不同。如何求相似…

算法笔记-DTW动态时间规整

算法笔记-DTW动态时间规整 简介简单的例子定义讨论 约束条件步模式标准化点与点的距离函数 具体应用场景 分类点到点匹配 算法笔记-DTW动态时间规整 动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法,大概在1970年左右被提出来,最早用…

DTW学习笔记1.0

目录 DTW算法的目的: DTW算法实现: 以下图两段序列为例: DTW代码实现: Dynamic programming function 示例: 单变量示例: 比较序列相似性示例: 缺点: DTW算法的目的&#xf…

动态时间规整—DTW算法

简述 Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法。应用也比较广,主要是在模板匹配中&#…

语音信号处理之(一)动态时间规整(DTW)

语音信号处理之(一)动态时间规整(DTW) zouxy09qq.com http://blog.csdn.net/zouxy09 这学期有《语音信号处理》这门课,快考试了,所以也要了解了解相关的知识点。呵呵,平时没怎么听课&#xff…

【机器学习】【DTW】

转自:https://blog.csdn.net/zouxy09/article/details/9140207 一、概述 在大部分的学科中,时间序列是数据的一种常见表示形式。对于时间序列处理来说,一个普遍的任务就是比较两个序列的相似性。 在时间序列中,我们通常需要比较…

动态时间规整算法: 从DTW到FastDTW

目录 动态时间规整算法: 从DTW到FastDTW总结:简介[^1]DTW[^1]FastDTW:使用多级粗化的方法[^1]结果 动态时间规整算法: 从DTW到FastDTW 总结: FastDTW作者对DTW的改进点很巧妙!先通过举例说明在一些情况下目前现有的方法对DTW改进…

机器学习算法(二十三):DTW(Dynamic Time Warping,动态时间调整)

目录 1 DTW(动态时间调整) 2 算法的实现 3 例子 4 python实现 ​​​​​​​5 DTW的加速算法FastDTW 5.1 标准DTW算法 5.2 DTW常用加速手段 5.3 FastDTW​​​​​​​ 1 DTW(动态时间调整) 动态时间调整算法是大多用于检…

初识DTW(动态时间规整)算法及Python实现例

目录 1. 概要 2. 时序列相似度度量 3. DTW基本算法 4. Python实现 5. Next Action 1. 概要 DTW( Dynamic Time Warping,动态时间规整)是基于动态规划(Dynamic Programming)策略对两个时序列通过非线性地进行时域对…