我有一个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位小数。
如何在不必点击它的情况下进行格式化??????????
谢谢!
答案 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。