我有一个 JFormattedTextField,应该显示 4 位小数。
jftSourceWidth.setText("0.0000");
jftSourceWidth.setHorizontalAlignment(SwingConstants.CENTER);
jftSourceWidth.setBounds(51, 69, 57, 20);
jftSourceWidth.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));
pnSource.add(jftSourceWidth);
当表单加载时,它会从某处给出一个值(使用 setText()),并且不会对其进行格式化。例如,它将显示 1.0 而不是 1.0000
现在这是奇怪的(?)部分...如果我点击它,那么一旦我点击其他任何地方,格式化程序就会启动并将其格式化为 4 位小数。
如何在不点击它的情况下对其进行格式化?????????
谢谢!
最佳答案
一个可能的原因是,如果您在设置 JFormattedTextField 的格式说明符之前设置了 JFormattedTextField 的文本。如果这样做,您可能会丢失文本。考虑在您给 JFormattedTextField 提供格式化程序之后设置它的文本。所以代替这个:
jftSourceWidth.setText("0.0000");
jftSourceWidth.setHorizontalAlignment(SwingConstants.CENTER);
jftSourceWidth.setBounds(51, 69, 57, 20);
jftSourceWidth.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));
pnSource.add(jftSourceWidth);
这样做:
//jftSourceWidth.setText("0.0000"); // not here
jftSourceWidth.setHorizontalAlignment(SwingConstants.CENTER);
// jftSourceWidth.setBounds(51, 69, 57, 20); // don't do this -- use layout managers instead
jftSourceWidth.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(
new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0.0000"))));
pnSource.add(jftSourceWidth);
// **** set the text here ***
jftSourceWidth.setText("0.0000");
另外,您需要避免使用 null 布局和 setBounds,因为这会导致创建难以增强的 GUI。
请注意,如果这不能解决您的问题,请考虑创建并发布 minimal example program .
关于java - 必须单击 JFormattedTextField 才能格式化其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840199/