我在努力创造 JTextField
此支票只能接受双倍(包括科学记数法):
abstract class DoubleKeyAdapter extends KeyAdapter
{
@Override
public void KeyTyped(KeyEvent e)
{
if (!(((JTextField) e.getSource()).getText() + e.getKeyChar()).matches(“[+-]?\\d*(\\.\\d*)?([eE][+-]?\\d*)?”))
e.consume();
}
@Override
public abstract void KeyReleased(KeyEvent e);
}
问题是当我尝试添加 -
例如文本字段的行乞。它不允许我这样做,因为它通过附加 -
换句话说,在课文的结尾,我不知道新的字符是在哪里加的。所以我的问题是:
有没有一种方法可以在文本字段出现之前预览整个文本?
有没有办法创造 JTextField
(或它的延伸)那更好?
有没有办法知道新角色的位置?
2条答案
按热度按时间neekobn81#
你可以使用
DocumentFilter
为了这个。它允许您在文本插入文档之前进行编辑。
它不是你想要的一切,但它应该让你开始。
3yhwsihp2#
我的解决方案灵感来自@camickr,并添加了两种方法:
getDouble()
以及setDouble()
```import javax.swing.;
import javax.swing.text.;
import java.util.regex.Pattern;
public class JDoubleField extends JTextField
{
private static final DocumentFilter doubleFilter = new DocumentFilter()
{
private final Pattern pattern = Pattern.compile("[+-]?(NaN|Infinity|\d*(\.\d*)?((?<=\d\.?)[eE][+-]?\d*)?)");
}