java textfield 右对齐,java TextField 遇到的有关问题

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());

}

}

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值