Java 如何在JTextField中设置不同的限制以显示输入提示和输入
我想定制一个JTextField,我的要求是:Java 如何在JTextField中设置不同的限制以显示输入提示和输入,java,swing,jtextfield,focuslistener,Java,Swing,Jtextfield,Focuslistener,我想定制一个JTextField,我的要求是: 在文本字段中显示提示 它将使用有限的字符数 这两个要求都起作用了。但问题是,如果我将限制设置为6,那么它会将输入长度设置为6。我需要设定一个额外的限制 比如,输入提示限制:20,数字输入限制:6 示例:输入提示:在此处输入数字,输入:666666(最多6位) 这是两位同学 CustomTextField.java CustomJTextFieldCharLimit.java 公共类CustomJTextFieldCharLimit扩展了明文{ 私有
公共类CustomJTextFieldCharLimit扩展了明文{
私有整数限制;
公共客户JTextFieldCharLimit(整数限制){
这个极限=极限;
}
public void insertString(int offset、String String、AttributeSet set)引发BadLocationException{
if(字符串==null){
返回;
}否则,如果((getLength()+string.length())尝试重写CustomTextField
类的paintComponent(Graphics Graphics)
方法。这将有助于在没有输入时重新绘制文本字段
下面是一个示例实现:
只需将这段代码添加到CustomTextField.java
文件中
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
if (hint.isEmpty() || getText().isEmpty() == false) {
return;
}
final Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(getDisabledTextColor());
g.drawString(hint, getInsets().left, graphics.getFontMetrics().getMaxAscent() + getInsets().top);
}
希望这有帮助
好的,我会在几分钟内检查DocumentFilter
您尚未更改代码?DocumentFilter是首选方法,因为它是可重用的。您可以将其添加到任何文档中,以便它适用于JTextField、JTextArea和JTextPane
这两个要求都有效。但问题是,如果我将限制设置为6,那么它会将输入长度设置为6。我需要设置一个额外的限制
您需要使用不同的方法。例如,您可以使用该类。提示独立于实际文本,因此长度可以不同。我检查了它是否正常工作,您是如何检查FocusListener是否正常工作的?不要使用自定义文档,这是一种旧方法。较新的方法是使用DocumentFilter
。签出举个工作示例。我刚刚创建了CustomTextField对象,在那里我看不到提示。我正在使用focus listener在文本框中显示提示。好的,我将在几分钟后检查DocumentFilter。我编辑了我的问题,请您再次检查,并为我提供解决方案。提前谢谢。
public class CustomJTextFieldCharLimit extends PlainDocument{
private int limit;
public CustomJTextFieldCharLimit(int limit) {
this.limit = limit;
}
public void insertString(int offset, String string, AttributeSet set) throws BadLocationException {
if (string == null) {
return ;
}else if ((getLength() + string.length()) <= limit) {
super.insertString(offset, string, set);
}
}
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
if (hint.isEmpty() || getText().isEmpty() == false) {
return;
}
final Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(getDisabledTextColor());
g.drawString(hint, getInsets().left, graphics.getFontMetrics().getMaxAscent() + getInsets().top);
}