必须单击JFormattedTextField以格式化其内容?

时间:2014-09-15 02:51:27

标签: java swing jformattedtextfield

我有一个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位小数。

如何在不必点击它的情况下进行格式化??????????

谢谢!

1 个答案:

答案 0 :(得分:2)

可能的原因是,如果您在设置其格式说明符之前设置了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