gpt4 book ai didi

java - 如何在 JTextField 中设置不同的限制以显示输入提示和输入

转载 作者:行者123 更新时间:2023-11-30 10:35:12 24 4
gpt4 key购买 nike

我想制作一个自定义的 JTextField,我的要求是:

  1. 在文本字段中显示提示。
  2. 它将占用有限数量的字符。

这两个要求都有效。但问题是,如果我将限制设置为 6,那么它会将输入长度设置为 6。我需要设置一个额外的限制。

喜欢,输入提示限制:20,数字输入限制:6示例:输入提示:在这里输入一个数字,输入:666666(最多6位)。

这是两个类。

CustomTextField.java

public class CustomTextField extends JTextField implements KeyListener, FocusListener{
private static final long serialVersionUID = 1L;

private final int CHAR_LIMIT = 6;
private String hint = null;
private boolean showingHint;

public CustomTextField(String hint) {
super(hint);
this.hint = hint;
this.showingHint = true;
this.setDocument(new CustomJTextFieldCharLimit(CHAR_LIMIT));
super.addFocusListener(this);
this.addKeyListener(this);
}

@Override
public void keyPressed(KeyEvent arg0) {

}

@Override
public void keyReleased(KeyEvent arg0) {

}

@Override
public void keyTyped(KeyEvent event) {
char c = event.getKeyChar();

if (!(Character.isDigit(c) || c == KeyEvent.VK_BACK_SPACE || c== KeyEvent.VK_DELETE)) {
event.consume();
}
}

@Override
public void focusGained(FocusEvent e) {
if(this.getText().isEmpty()) {
super.setText("");
showingHint = false;
}
}
@Override
public void focusLost(FocusEvent e) {
if(this.getText().isEmpty()) {
super.setText(hint);
showingHint = true;
}
}

@Override
public String getText() {
return showingHint ? "" : super.getText();
}
}

CustomJTextFieldCharLimit.java

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

最佳答案

Okay, I'll check DocumentFilter in few min

你还没有改变你的代码? DocumentFilter 是首选方法,因为它是可重用的。您可以将它添加到任何文档,以便它适用于 JTextField、JTextArea、JTextPane。

Both the requirements are working. But the problem is that if I set the limit to 6, then it sets the input length to 6. I need to set an additional limit.

您需要使用不同的方法。例如,您可以使用 Text Prompt类(class)。提示独立于实际文本,因此长度可能不同。

关于java - 如何在 JTextField 中设置不同的限制以显示输入提示和输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com