JavaSwing之--JTextField

article/2025/8/15 6:00:48

JavaSwing之–JTextField

JTextField 是一个允许编辑单行文本的轻量级组件,它提供了一系列的构造方法和常用方法用来编写可以存储文本的文本框满足程序功能的需求。

以下在简要介绍常用构造方法、普通方法后详解各种方法的应用及举例。

一、构造方法
方法名称功能描述
JTextField()构造一个新的 TextField .
JTextField(int columns)构造一个具有指定列数的新空 TextField
JTextField(String text)构造一个用指定文本初始化的新 TextField
JTextField(String text, int columns)构造一个用指定文本和列初始化的新 TextField
JTextField(Document doc, String text, int columns)构造一个新的 JTextField,它使用给定的文本存储模型和给定的列数。
二、常用方法
方法名称功能描述
void setSize(int width,int height)设置文本框的尺寸
void setSize(Dimension d)设置文本框的尺寸
void setBounds(int x,int y,int width,int height)设置组件的起始位置及宽、高
void setLocation(int x,int y)设置文本框在容器的位置,其左上角坐标是(x,y)
void setText(String str)设置文本框的内容
String getText()获取文本框内容,返回字符串
void setBorder(Border border)设置文本框的边框样式
void setTooltip(String str)设置文本框内容提示语
void setFont(Font font)设置文本框内容字体
void setForeground(Color color)设置文本框前景色(字体颜色)
void setBackground(Color color)设置文本框背景色
void setEditable(Boolean boolean);设置文本框内容是否可编辑
void setHorizontalAlignment(int alignment)设置文本框内容对齐方式,默认左对齐
void setVisible(Boolean boolean)设置文本框是否可见
三、用法详解
3.1 构造方法详解

文本框的常用构造方法中常用到的参数有:

int columns:指定文本框的初始列数

String text:指定文本框初始包含的文本内容

如下代码所示。

// 创建一个空的文本框,无初始文本和默认宽度
JTextField textField1 = new JTextField();
// 创建一个宽度为30个字符的空文本框
JTextField textField2 = new JTextField(30);
// 创建一个带有初始文本内容的文本框
JTextField textField3 = new JTextField("初始文本内容");// 创建一个宽度为30个字符并带有初始文本内容的文本框
JTextField textField4 = new JTextField("初始文本内容", 30);

在设置文本框初始内容时,可以根据程序需求根据应输入的内容设置为提示词,如:创建一个显示/输入用户名的文本框,将“请输入用户名”设为初始内容,当做提示词应用,详细应用见本文后续部分。

JTextField txtName = new JTextField("请输入用户名");
3.2 常用方法详解
  • 获取文本

调用String getText()方法,获取文本框中输入的文本内容。

String str = textField1.getText().trim();//使用trim方法去除文本内容前后的空格
  • 设置边框

setBorder(Border border)方法可以为边框设置不同样式的边框。参数border是一个Border类实例化对象。

Border是一个接口,需要重写类中的三个方法实现自定义边框。

自定义圆角边框示例

textField.setBorder(new Border(){@Override/*** 重写painBorder(Component c, Graphics g, int x, int y, int width, int height)方法绘制带有圆角的边框* @param c 组件,表示边框绘制在哪个组件上* @param g Graphics对象,用于实际的绘制操作* @param x 边框绘制区域的x坐标* @param y 边框绘制区域的y坐标* @param width 边框绘制区域的宽度* @param height 边框绘制区域的高度*/public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {// 创建Graphics2D对象,用于更高级的图形绘制,并确保资源在使用后被释放Graphics2D g2d = (Graphics2D) g.create();// 设置抗锯齿,提高图形绘制的质量,使边缘更平滑g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 创建一个圆角矩形对象,定义边框的形状// 这里使用width-1和height-1是为了避免绘制区域的右侧和下侧边缘出现额外的像素// 20和20分别是圆角的宽度和高度,决定了圆角的弧度Shape shape = new RoundRectangle2D.Double(x,y,width-1,height-1,20,20);// 绘制边框g2d.draw(shape);// 释放Graphics2D对象,避免资源泄露g2d.dispose();}/*** 重写getBorderInsets方法以自定义边框的内边距* 此方法用于指定组件边框的上、左、下、右边距* @param c 组件对象,用于确定边框内边距的上下, 该参数在此方法中未使用,但保持了接口的一致性* @return 返回一个Insets对象,定义了边框的上、左、下、右边距*/@Overridepublic Insets getBorderInsets(Component c) {// 设置边框的内边距:上边距为1,左边距为10,下边距为1,右边距为1return new Insets(1,10,1,1);}@Override//设置文本是否不透明,true表示不透明,fase表示透明public boolean isBorderOpaque() {return true;}});

在这里插入图片描述

JDK中提供了可以提供Border对象的工厂类BorderFactory用于创建不同的边框对象,常见边框样式如下:

①createLineBorder(Color color,int thickets):创建具有指定颜色的线条边框。

// 设置文本字段的边框为线性,宽度为3,颜色为十六进制值0x00A182的颜色
textField.setBorder(BorderFactory.createLineBorder(new Color(0x00A182),3));

②createBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner):使用内部和外部高光和阴影区域的指定颜色创建指定类型的斜角边框。

textField.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.MAGENTA,Color.blue,Color.red,Color.green));

以上方法中type的数值为常数:BevelBorder.RAISED和BevelBorder.LOWERED。该方法有多重重载方式,可以使用最简单的方式创建边框,如下所示。

// 设置textField的边框为凸起的斜面边框,提高用户界面的视觉效果
textField.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

③createDashedBorder(Paint paint, float thickness, float length, float spacing, boolean rounded):创建指定 paint 、 thickness 、线形、相对 length 和相对 spacing的虚线边框。

// 设置textField3的边框为红色的虚线边框,指定线宽、线长、间隔和是否圆角
textField3.setBorder(BorderFactory.createDashedBorder(Color.red,2,2,2,true));

以上是最复杂方法的应用,该方法根据参数实际设置情况有多重重载方式,最简单方式是参数为null,如下所示。

// 设置textField3的边框为默认颜色的虚线边框
textField3.setBorder(BorderFactory.createDashedBorder(null));

④createEmptyBorder(int top, int left, int bottom, int right):创建一个占用空间但不绘制的空边框,指定边框的顶部、左侧、底部和右侧的宽度。

// 设置textField4的边框为空边框,上下左右边距均为5像素
textField4.setBorder(BorderFactory.createEmptyBorder(5,5,5,5))		

⑤createEtchedBorder(EtchedBorder.RAISED,Color.red,Color.black)):使用指定的突出显示和阴影颜色创建具有“蚀刻”外观的边框。

// 设置textField5的边框为蚀刻(浮雕)效果的红色和黑色边框
textField5.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED,Color.red,Color.black));

该方法有多个重载方法,可根据需要调整参数个数创建不同具有蚀刻外观的边框。

⑥createTitledBorder(String title):创建具有指定标题、默认边框类型(由当前外观确定)、默认文本位置(由当前外观确定)、默认对齐方式(行距)和默认字体的新标题边框文本颜色(由当前外观决定)。

textField6.setBorder(BorderFactory.createTitledBorder("这是标题"));

若想指定边框类型、标题、文本位置、对齐方式、标题颜色,可以使用以下方法完成。

createTitledBorder(Border border, String title, int titleJustification, int titlePosition, Font titleFont, Color titleColor)
textField6.setBorder(BorderFactory.createTitledBorder(// 创建一个pink色、宽度为2的线条边框,设置标题为"这是标题"BorderFactory.createLineBorder(Color.pink,2),  "这是标题",// 设置标题的位置为边框的右 trailing 边TitledBorder.TRAILING,// 设置标题相对于边框的位置为顶部TitledBorder.TOP,// 创建并设置标题的字体为微软雅黑、粗体、大小为12new Font("微软雅黑",Font.BOLD,12),// 设置标题的颜色为十六进制颜色值0x00A182new Color(0x00A182)));

该方法有多个重载方法,可以调整参数个数及顺序创建不同风格的边框。

⑦createCompoundBorder(Border outsideBorder, Border insideBorder):创建一个复合边框,指定要用于外边和内边的边框对象。

// 设置textField的边框为复合边框,复合边框由内外两个边框组成
// 外层边框为粉红色线条边框,内层边框为透明边框,上下内边距为5像素,左内边距为10像素,右内边距为5像素
textField.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.pink),BorderFactory.createEmptyBorder(5,10,5,5)));

更多边框设置介绍详见作者边框设置文章介绍

  • 字体设置

调用setFont(Font font)方法 设置文本框内容字体。文本的字体、字号、样式封装为一个Font对象参数。示例如下:

// 设置textField1的字体为微软雅黑,,字号为20
textField1.setFont(new Font("微软雅黑", Font.PLAIN, 20));//样式为普通
textField1.setFont(new Font("微软雅黑", Font.BOLD|Font.ITALIC, 20));//样式为粗体、斜体
  • 文本对齐方式

调用方法setHorizontalAlignment(int alignment) 设置文本框内容对齐方式,默认左对齐。参数alignmen是JTextField的常数,表示文本内容相对文本框的对齐方式,其值如下:

①JTextField.LEFT:左对齐
②JTextField.CENTER:居中对齐
③JTextField.RIGHT:右对齐
④JTextField.LEADING:头部对齐
⑤JTextField.TRAILING:尾部对齐

可以表示左对齐、居中对齐、右对齐、头部对齐、尾部对齐,代码示例如下:

textField1.setHorizontalAlignment(JTextField.LEFT); // 将文本对齐到左侧
textField1.setHorizontalAlignment(JTextField.CENTER); // 将文本居中对齐
textField1.setHorizontalAlignment(JTextField.RIGHT); // 将文本对齐到右侧
textField1.setHorizontalAlignment(JTextField.LEADING); // 根据文本字段的方向将文本对齐到前部边缘
textField1.setHorizontalAlignment(JTextField.TRAILING); // 根据文本字段的方向将文本对齐到尾尾部缘
  • 设置文本颜色

调用setForeground(Color c)设置文本的颜色,参数c是一个Color对象。

//设置文本颜色
textField1.setForeground(Color.ORANGE); //  设置文本颜色为橙色
textField1.setForeground(new Color(0x00A182)); // 设置文本颜色为十六进制值0x00A182的颜色
textField1.setForeground(new Color(0, 0, 255)); // 设置文本颜色为RGB颜色(0, 0, 255)
  • 设备背景色

调用setBackground(Color c)设置文本框背景色,参数c是一个Color对象。

textField1.setBackground(Color.ORANGE);//  设置文本颜色为橙色
textField1.setBackground(new Color(0x00A182));// 设置文本颜色为十六进制值0x00A182的颜色
textField1.setBackground(new Color(0, 0, 255));// 设置文本颜色为RGB颜色(0, 0, 255)
四、事件处理

文本框支持多种事件处理机制,常见的事件类型及处理监听接口如下表所示。

事件类型描述监听接口
FocusEvent文本框获得/失去焦点时触发FocusListener
MouseEvent文本框获得焦点时鼠标操作时触发MouseListener
ActionEvent用户在文本框中输入内容后按下回车键触发ActionListener
KeyEvent文本框获得焦点时键盘按键按下、释放、敲击时触发KeyListener
DocumentEvent文本内容发生变化时(如增删字符、修改内容等)触发DocumentListener
4.1 焦点事件

在 Java Swing 中,JTextField 支持通过 焦点事件(FocusEvent) 来监听文本框是否获得或失去了输入焦点。这通过 调用addFocusListener(FocusListener f)方法实现,参数为接口实现类对象或者FocusAdapter类实例,前者作为参数必须实现接口的焦点获得、失去方法,后者做参数可以根据需要仅实现其中之一即可。

焦点事件可以用于文本框提示词的操作中,以下代码演示了当文本获取焦点后提示词隐藏,失去焦点后提示词显示。

//增加焦点事件监听器
textField1.addFocusListener(new FocusAdapter() {@Overridepublic void focusGained(FocusEvent e) {textField1.setText("");//清空输入框内容}@Overridepublic void focusLost(FocusEvent e) {textField1.setText("请输入用户名");//恢复默认提示}
});

更详细的操作与完善,请读者结合实际需求补充。

4.2 鼠标事件

鼠标事件通过在文本框上注册监听来完成,通常可以使用 addMouseListener 或 addMouseMotionListener 方法为组件添加监听器。

常用鼠标事件方法

  • mouseClicked(MouseEvent e):鼠标点击时触发。

  • mousePressed(MouseEvent e):鼠标按下时触发。

  • mouseReleased(MouseEvent e):鼠标释放时触发。

  • mouseEntered(MouseEvent e):鼠标进入组件区域时触发。

  • mouseExited(MouseEvent e):鼠标离开组件区域时触发。

addMouseListener(MouseListener m)方法以接口对象为参数必须全部重写以上所有方法,当使用MouseAdapter适配器对象作为参数时,可以根据需求重写以上鼠标事件方法中的任一一个或多个。

以下以鼠标移入文本框修改背景色、移出恢复背景色为例演示用法。

Color color = textField2.getBackground();//获取背景色
textField2.addMouseListener(new MouseAdapter() {@Overridepublic void mouseEntered(MouseEvent e) {textField2.setBackground(new Color(0x14DEB7));//修改背景色}@Overridepublic void mouseExited(MouseEvent e) {textField2.setBackground(color);//恢复背景色}
});
4.3 动作事件

动作事件通过调用方法addActionListener(ActionListener a)实现附加到文本框上的事件处理。以回车获取文本框输入内容为例:

textField.addActionListener(e -> {JOptionPane.showMessageDialog(frame,textField3.getText());//回车后显示输入框内容
});
4.4 键盘事件

键盘事件通过调用addKeyListener(KeyLIstener k)注册监听完成事件处理,该方法参数为KeyListener接口实例或适配器KeyAdapter抽象类对象,前者需要重写接口的keyTyped (KeyEvent e) 、keyPressed(KeyEvent e) 、keyReleased(KeyEvent e)三个方法,后者做参数只需要重写其中一个即可,据实际而定。

以在文本框中输入内容后回车获取输入内容为例:

public void keyPressed(KeyEvent e) {// 检查按键事件是否为按下Enter键if(e.getKeyCode()==KeyEvent.VK_ENTER){//显示输入框内容JOptionPane.showMessageDialog(frame,textField4.getText());}
}

若想获取按下的是哪个字母键,可以根据需要在任一重写方法中调用键盘事件的getKeyChar()方法判断,举例如下:

public void keyPressed(KeyEvent e) {JOptionPane.showMessageDialog(frame,e.getKeyChar());//显示按下的字母
}
4.5 文档事件

文本框的文档事件处理能有效解决文本插入、删除、修改相关的技术问题,在重写方法insertUpdate、removeUpdate、changedUpdate中根据需要完成既定的功能。

// 获取文本框的文档对象
Document document =  textField5.getDocument();
// 为文档对象添加文档监听器
document.addDocumentListener(new DocumentListener() {// 当文档中插入文本时调用@Overridepublic void insertUpdate(DocumentEvent e) {// 弹出对话框提示用户文本已插入JOptionPane.showMessageDialog(frame,"插入文本");}         // 当文档中删除文本时调用@Overridepublic void removeUpdate(DocumentEvent e) {// 弹出对话框提示用户文本已被删除JOptionPane.showMessageDialog(frame,"删除文本");}           // 当文档中的文本发生变化时调用@Overridepublic void changedUpdate(DocumentEvent e) {// 弹出对话框提示用户文本已改变JOptionPane.showMessageDialog(frame,"文本改变");}           
});
五、总结

文本框是Java Swing编程中常见的应用组件,常用于文本内容的输入存储、显示、修改等操作,应用广泛。

在文本框上注册相关监听器,可以完成动作事件、键盘事件、鼠标事件、焦点事件、文档事件的处理,完善程序功能,提高程序运行效率。

更多功能详解参看相关的JDK说明文档。


http://www.hkcw.cn/article/kNIRUFjwJy.shtml

相关文章

Windows系统之VHD安装

环境准备 工具说明Dism部署系统、提取和转换系统镜像等等,还有很多功能大家可以自行探索。这里只用到Dism的部署系统功能。 Releases Chuyu-Team/Dism-Multi-language GitHubbcdedit.exe自带工具 C:\Windows\System32\bcdedit.exe 创建虚拟磁盘 首先右键点击我…

解决Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tre

问题描述 在更新自建基础项目过程中,compile、install报错。 Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field com.sun.tools.javac.tree.JCTree qualid 解决方案 问题原因是Lombok ,与 JDK 21 兼容的最低 Lombok 版本是…

【C++】二叉搜索树 - 从基础概念到代码实现

📌 个人主页: 孙同学_ 🔧 文章专栏:C 💡 关注我,分享经验,助你少走弯路 文章目录 1. 二叉搜索树的概念2. 二叉搜索树的性能分析3. 二叉搜索树的插入4. 二叉搜素树的查找5. 二叉搜索树的删除6.二…

C++之类和对象基础

⾯向对象三⼤特性:封装、继承、多态 类和对象 一.类的定义1. 类的定义格式2.类域 二.实例化1.对象2.对象的大小 三.this指针 在 C 的世界里,类和对象构成了面向对象编程(Object-Oriented Programming,OOP)的核心框架&…

报错java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not ...解决方法

在运行项目时出现java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field com.sun.tools.javac.tree.JCTree qualidzz这样的报错 解决方法 1.第一步:在pom文件中将lombok的版本改成最新的 此时1.18.34是新…

2025-03-12 Python深度学习1——安装Anaconda与PyTorch库

文章目录 1 配置 Anaconda1.1 下载1.2 安装1.3 配置环境变量1.4 检查安装 2 安装 PyTorch 库2.1 创建 DL 环境2.2 安装/升级 CUDA2.3 配置环境变量2.4 安装 Pytorch 库方法一(不稳定)方法二(推荐) 2.5 检查安装 3 Pycharm Communi…

C++ 关联式容器:map,multimap,set,multiset

目录 引言 一、关联式容器概述 1.1 与序列式容器的区别 1.2 底层结构 二、set容器详解set介绍 2.1 set的特性 2.2 set的模板参数 2.3 set的常用接口 2.4 set使用示例 三、map容器详解map介绍 3.1 map的特性 3.2 map的模板参数 3.3 map的常用接口 3.4 map使用示例 …

从零开始配置Qt+VsCode环境

从零开始配置QtVsCode环境 文章目录 从零开始配置QtVsCode环境写在前面扩展安装及配置Qt Configure配置 VsCode创建Qt工程VsCodeQMakeMinGwVsCodeQMakeMsvcVsCodeCMakeMinGwVsCodeCMakeMsvcQtCreatorQMakeMinGw->VsCodeQtCreatorQMakeMsvc->VsCodeQtCreatorCMakeMinGw-&g…

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(一) - 三相逆变器的搭建

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(一) - 三相逆变器的搭建 前言一、BLDC电机六步换相简明控制原理二、Simulink中BLDC电机模块的机械连接三、三相逆变电路的搭建四、仿真参数设置与仿真结果验证五、补充内容参考链接 前言 本系列文章分享…

Lapce:一款用 Rust 编写的快速且强大的代码编辑器

Lapce(IPA:/lps/)是一个使用纯 Rust 编写的开源代码编辑器。通过利用 OpenGL 渲染 GUI,以及 Rust 提供的性能,采用Xi-Editor的Rope Science设计,可实现闪电般的快速计算。 Stars 数35888Forks 数1113 主要…

SpringBoot启动后初始化的几种方式

目录 一、静态代码块 二、构造方法 三、PostConstruct 四、InitializingBean 接口 五、 Bean 注解中的 initMethod 六、 CommandLineRunner 接口 七、ApplicationRunner 接口 八、EventListener事件 九、SmartInitializingSingleton接口 十、ApplicationListener接口…

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…

Node.js下载安装及环境配置教程(保姆级教程)

一、安装程序 (安装包放在文章最后需要的友友可自取哦) (1)下载完成后,双击安装包,开始安装Node.js (2)此位置可修改为自己的安装路径,修改完后点击next (3…

com.mysql.cj.jdbc.exceptions.CommunicationsException Communications link failure 问题解决

前言: 一般这个报错大多是网络原因导致的,确保你不是网络问题再往下看 问题 在一个方法上(该方法非常复杂执行时间长)加了 Transactional(rollbackFor Exception.class)后出现了如下图所示的错误 解决: 经过排查并非网络问…

【解决方案】CloudFront VPC Origins 实践流程深入解析 —— 安全高效架构的实战之道

目录 引言一、VPC Origins 的核心价值(一)安全性提升(二)运维效率优化(三)成本节约(四)全球分发能力的保留 二、VPC Origins 的架构解析(一)流量路径设计&…

MySQL性能调优(三):MySQL中的系统库(sys系统库、information_schema)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 MySQL中的系统库1.3.sys系统库1.3.1.sys使用须知1.3.2.sys系统库使用1.3.3.查看慢SQL语句慢在哪里1.3.4.小结 1.4.information_schema1.4.1.什么是information_schema1.4.2.information_schema表分类Server层…

MySQL的详细使用教程

目录 1. 连接到MySQL服务器2. 创建和删除数据库2-1创建数据库2-2删除数据库 3. 数据表操作3.1 选择数据库3.2 创建数据表3.3 查询数据表3.4 修改数据表3.5 删除数据表 4. 数据内容操作4.1数据操作1. 插入数据2. 查询数据(1)like模糊查询(%表示…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原…

【中间件】Pulsar集群安装

目录 一、Pulsar介绍 1.1 Pulsar基本介绍 1.2 Pulsar架构 Producer & Consumer Apache Zookeeper Pulsar Brokers Apache Bookkeeper 二、Zookeeper集群安装 三、Pulsar集群安装 3.1 bookie与broker配置 3.1.1 修改bookie配置文件 3.1.2 修改broker配置文件 3…

41-dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

1 前言 Text2SQL(或称NL2SQL)是一种自然语言处理技术,旨在将自然语言(Natural Language)问题转化为关系型数据库中可执行的结构化查询语言(Structured Query Language,SQL)&#xf…