`
yedaya
  • 浏览: 21299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java TextField 遇到的问题

阅读更多

最近做swing开发,发现一个问题,不知道是java特意为之,还是其bug,(原因找到了,不是java本身的问题,是因为我机器上装了有道,并开启了选词翻译,我猜应该是在选择字符串的时候有道截取并触发了键盘事件,导致我自己注册的键盘事件被调用。如果程序中定义了自己的“ctrl+c”快捷键,在程序空白鼠标拖动时也会触发这个“ctrl+c”事件,经调查这也是有道词典引起的。有道词典害人不浅啊...)

就是JTextField的文本选择事件会触发keyListener .

 

 

package textfield;

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TextKeyTest extends JPanel implements KeyListener{
	private JTextField text;
	
	public static void main(String[] args){
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(200,200);
		frame.add(new TextKeyTest());
		frame.setVisible(true);
	}
	public TextKeyTest(){
		text = new JTextField();
		text.addKeyListener(this);
		this.setLayout(new BorderLayout());
		this.add(text,BorderLayout.CENTER);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		System.out.println("keyTyped");
	}

	@Override
	public void keyPressed(KeyEvent e) {
		System.out.println("keyPressed");
	}

	@Override
	public void keyReleased(KeyEvent e) {
		System.out.println("keyReleased");
	}
}

 这样只要选择textField中的内容就会触发key事件,而且不止是一个,在某些业务处理中会存在bug,

例如:监听textField的键盘事件,当达到一定长度后转换焦点,

解决方案是使用DocumentListener监听输入框的输入:

package textfield;

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class TextKeyTest extends JPanel implements KeyListener,DocumentListener{
	private JTextField text;
	
	public static void main(String[] args){
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(200,200);
		frame.add(new TextKeyTest());
		frame.setVisible(true);
	}
	public TextKeyTest(){
		text = new JTextField();
//		text.addKeyListener(this);
		text.getDocument().addDocumentListener(this);
		this.setLayout(new BorderLayout());
		this.add(text,BorderLayout.CENTER);
	}

	@Override
	public void keyTyped(KeyEvent e) {
		System.out.println("keyTyped");
	}

	@Override
	public void keyPressed(KeyEvent e) {
		System.out.println("keyPressed");
	}

	@Override
	public void keyReleased(KeyEvent e) {
		System.out.println("keyReleased");
	}
	
	@Override
	public void insertUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("insertUpdate: " + text.getText());
	}
	@Override
	public void removeUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("removeUpdate: " + text.getText());
	}
	@Override
	public void changedUpdate(DocumentEvent e) {
		// TODO Auto-generated method stub
		System.out.println("changedUpdate: " + text.getText());
	}
}

 

 

以上。

分享到:
评论

相关推荐

    8-22textfield8-22textfield8-22textfield8-22textfield

    如果您能提供关于这些字段的真实内容,比如标题可能是“Java编程中的TextField使用”,描述可能是“在Java Swing应用中遇到TextField输入验证的问题”,标签可能是“Java”、“Swing”、“UI设计”等,那么我可以...

    常见的java中文问题的解决方法

    当在Java Swing或AWT组件上显示中文时,可能会遇到字符乱码或显示不全等问题。 ##### 1. 设置默认字体 为了解决这个问题,可以通过设置默认字体的方式确保所有组件都能正确地显示中文。以下是一种典型的方法: ``...

    一些界面的java源代码

    6. **异常处理**:理解Java中的try-catch语句,确保程序在遇到错误时能优雅地处理,而不是突然崩溃。 7. **编译与运行**:使用javac命令编译Java源代码,使用java命令运行编译后的字节码文件。 8. **项目结构**:...

    Java简易聊天程序

    Java简易聊天程序是一种基于Java编程语言实现的交互式通信应用,它允许用户通过网络进行文本聊天。这个程序的核心概念和关键技术主要包括多线程、网络编程、输入/输出流以及简单的用户界面设计。以下是对这些关键...

    JAVA开发包及文档

    通过阅读和理解这些源码,开发者可以深入了解GUI编程背后的实现原理,提高编程技能,并能快速解决实际项目中遇到的问题。 **5. 工具** 虽然描述中没有明确指出具体工具,但Java开发通常涉及到IDE(集成开发环境),...

    自己做的Java记事本

    8. **异常处理**:在文件操作过程中,可能会遇到文件不存在、权限不足等问题,这时需要使用`try-catch`语句进行异常处理,确保程序的稳定运行。 综上所述,这个Java记事本项目是一个很好的学习和实践Java GUI编程的...

    JAVA实验&实验报告&实验指导书

    5. 异常处理:Java的异常处理机制是通过try-catch-finally块来实现的,用于捕获和处理程序运行时可能遇到的问题。理解Checked和Unchecked异常的区别,以及如何有效地抛出、捕获和处理异常,是编写健壮代码的关键。 ...

    图书管理系统(JAVA的AWT实现)

    为了确保程序的健壮性,应使用`try-catch`语句块捕获可能出现的异常,例如文件不存在、数据库连接失败等,确保程序在遇到问题时能够优雅地处理并给出相应提示。 9. 程序打包与部署: 完成开发后,可以使用JAR打包...

    科学计算器Java源代码

    本项目中使用了`java.awt.*`包中的多个类,包括`Frame`、`Label`、`TextField`、`Panel`、`Button`等。 - **Frame**:表示一个顶级容器,通常是应用程序的主窗口。在代码中,`A5il3w extends Frame` 表示`A5il3w`类...

    java仿windows简易计算器课程设计 源码+报告

    在报告部分,你需要详细记录设计过程、遇到的问题及解决方案、代码实现的思路和关键部分。同时,要对项目的功能进行测试,确保所有运算都能正确无误地执行。这可能包括边界条件测试(如零除、大数运算等)和异常处理...

    Java practice

    `JFrame`是窗口的基础,`JPanel`用于组织组件,`Label`、`TextField`和`TextArea`则构成了用户交互界面。`GridLayout`布局管理器被用来控制组件的排列方式,`ActionListener`接口用于处理按钮的点击事件。 在处理...

    简单的java用户登录界面

    在数据库操作过程中可能会遇到各种异常,如`ClassNotFoundException`(找不到类异常)和`SQLException`(SQL异常)。代码中对这两种异常进行了捕获,并打印出异常信息,帮助开发者快速定位问题。 ```java catch ...

    JAVA计算器(科学型+标准型)

    5. **异常处理**:在进行某些运算时,可能会遇到除零错误、数值溢出等问题,这时需要使用`try-catch`块来捕获并处理异常。 6. **用户输入验证**:对于用户输入,开发者需要确保输入是有效的,例如,防止在没有数字...

    java50个经典例题

    学习者可能会遇到如何在JSP页面上展示数据,或者使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)进行页面逻辑处理的例题。 3. EJB:是Java的组件模型,用于实现业务逻辑。例子可能...

    java 聊天室源码

    8. **异常处理**:网络通信中常遇到各种异常情况,如连接中断、数据传输错误等。良好的异常处理机制能确保程序在遇到问题时不会崩溃,而是优雅地处理并给出提示。 9. **安全性**:虽然这是一个基础的聊天室源码,但...

    java_上机实验5

    6. **撰写实验报告**:整理实验过程中的心得体验,记录遇到的问题及解决方法,撰写成实验报告。 ### 实验结果 由于给定的实验内容并未提供具体的实验结果和截图,这里只能给出一个大致的预期结果示例: 1. **第一...

    有关学成成绩的java界面设计

    5. **异常处理**: 在处理用户输入或文件读取时,可能会遇到无效数据或文件不存在等问题。因此,良好的异常处理机制是必要的,可以使用try-catch-finally语句块来捕获并处理可能出现的异常。 6. **文件I/O操作**: ...

    Java项目报告模版.pdf

    学生在完成项目后会分享他们的学习体验,包括遇到的问题、解决问题的方法以及对编程技能的提升。 8. **程序界面** 提供了两种界面样式:普通型和科学型,展示程序的不同视觉表现。 9. **程序清单** 展示部分源...

    java-web-tld.rar_java tld

    7. **常见问题和解决方法**:可能列出开发者在使用TLD时可能会遇到的问题,以及相应的解决策略。 通过学习这个资源包,开发者不仅可以掌握TLD的基本原理,还能深入了解Struts1.x和2.x框架的标签库,从而提升在Java ...

Global site tag (gtag.js) - Google Analytics