我有一个JTextField(JT)在我尽快要按照用户类型"e"
,例如在里面,这个词"Example"
被自动JTextField中写入。
我使用代码:
KeyListener keyListener = new KeyListener() {
public void keyPressed(KeyEvent e) {
jt.setText("Example");
}
}
但这会"Examplee"
在按下e时给出!有任何想法吗?非常感谢
不要KeyListener
在文本组件上使用,存在一系列问题(未通知,突变异常,当用户将某些内容粘贴到字段时未通知),相反,您应该使用DocumentFilter
例如…
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class TextFieldExample {
public static void main(String[] args) {
new TextFieldExample();
}
public TextFieldExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JTextField field = new JTextField(20);
((AbstractDocument)field.getDocument()).setDocumentFilter(new ExampleExpandingDocumentFilter());
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(field);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class ExampleExpandingDocumentFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
System.out.println("I" + text);
super.insertString(fb, offset, text, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
if ("e".equalsIgnoreCase(text)) {
text = "example";
}
super.replace(fb, offset, length, text, attrs);
}
}
}
介绍 (Introduction) JTextField类是一个允许编辑单行文本的组件。 Class 声明 (Class Declaration) 以下是javax.swing.JTextField类的声明 - public class JTextField extends JTextComponent implements SwingConstants 字段 (Field)
问题内容: 我想用setText()方法更新jlabel和jtextfield,但是它不起作用。但是,其余代码仍在工作。代码如下; 在这里,islemSureci是JLabel,而textFiled是JTextField。设置它们后,它不起作用。代码中的所有工作完成后,它们就会出现。请问原因是什么? 问题答案: 我认为您的意思是 “所有工作完成之后” 是从文件(您注释的行)中加载文本。我认为这段代
主要内容:1 Java JTextField的介绍,2 Java JTextField的声明,3 Java JTextField的构造方法,4 Java JTextField的方法,5 Java JTextField的案例1,6 Java JTextField的案例21 Java JTextField的介绍 JTextField类的对象是一个文本组件,允许编辑单行文本。它继承了JTextComponent类。 2 Java JTextField的声明 我们来看一下javax.swing.JTex
尝试在JTextField被更新时获取其值(插入字符、删除字符、更改字符),然后设置其值。 我遇到了“试图在通知中变异”的例外情况,导致我: 但是,决不能从文档侦听器中修改文本组件的内容。如果这样做,程序可能会死锁。相反,您可以使用格式化的文本字段或提供文档过滤器。从这里开始 我正在使用文档过滤器将JTextField的字符数限制为12,但我不知道如何在不使用文档侦听器的情况下检测JTextFie
这是毁灭性的结果:http://imgur.com/xcudefm
问题内容: 我希望用户仅输入字母或空格(如果用户输入其他字符),我想给jOptionPane消息,我已经搜索过,并且尝试了以下代码 但是现在无论我输入什么都会给出错误 现在我更改了代码 现在它仅在用户输入数字时发出消息。我该如何解决 问题答案: 使用一个,这是我制作的一个示例,它将仅接受字母字符和空格: