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 знаков после запятой.

Как мне его отформатировать, не нажимая на него?????????

Спасибо!


person SuperWoman    schedule 15.09.2014    source источник


Ответы (1)


Возможная причина заключается в том, что вы установили текст вашего 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");

Кроме того, вам следует избегать использования нулевых макетов и setBounds, поскольку это приводит к созданию жестких графических интерфейсов, которые трудно улучшить.

Обратите внимание: если это не решит вашу проблему, рассмотрите возможность создания и публикации минимального примера программы.

person Hovercraft Full Of Eels    schedule 15.09.2014