Java 自定义JtextField属性

Java 自定义JtextField属性,java,Java,我已经创建了一个自定义的JtextField,但是当我在主JFrame中调用它时,任何适当定义的方法都不能像getText或SetText那样工作 import javax.swing.JTextField; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class JTextFieldDecimal extends JTextField { private static final l

我已经创建了一个自定义的
JtextField
,但是当我在主
JFrame
中调用它时,任何适当定义的方法都不能像getText或SetText那样工作

import javax.swing.JTextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class JTextFieldDecimal extends JTextField {
    private static final long serialVersionUID = 1L;
public JTextFieldDecimal()
{
    super();
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent e) {
            char c =e.getKeyChar();
            if(!((c>='0') && (c<='9') || 
                    (c==KeyEvent.VK_BACK_SPACE) ||
                    (c==KeyEvent.VK_DELETE)))
            {
                getToolkit().beep();
                e.consume();
            }

        }
    });

}
}

作为格式化文本字段的替代方案,我建议您不要尝试自己验证输入。您可以使用
JFormattedTextField
在焦点丢失时为您执行此操作。这是一个简单的例子

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter()
);
这将使用JVM的
语言环境
将数字格式化为预期的格式(十进制值更简单)。如果只想获取整数,请提供整数格式

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter(
        NumberFormat.getIntegerInstance()
    )
);
如果希望始终有两个十进制数字,如
5.00
,请在
NumberFormat
中定义它:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(2);

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter(nf)
);

你可以在

上找到更多关于这方面的信息。这部分代码中没有错误,请添加
Produit
类的相关部分(包括第98行)。顺便说一句,我不会对
JTextField
密钥适配器造成太多麻烦。您使用该事件,但是否确定您具有优先级
JTextField
使用
文档
来管理输入,如果我没有记错的话。
txtPrixHT
在第98行必须
null
。我已经按值填充了txtPrixHT,它不是null。使用调试器来确保这是使用添加到GUI的
txtPrixHT
实例。如果这是抛出NPE的行,这是最明显的原因。感谢deer dev的回答,我在声明我的自定义JtextField时犯了错误,我的错误是:JTextFieldDecimalTprixHT=new JTextFieldDecimalT(),那么声明中的第一个字JTextFieldDecimalTprixHT必须是removed@ITdevjava你忘了一个空格
JTextFieldDecimaltxtPrixHT
JTextFieldDecimaltxtPrixHT
对于其余部分,我不理解您的问题。
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(2);

JFormattedTextField decimalTxt = new JFormattedTextField(
    new NumberFormatter(nf)
);