2014-09-15 3 views
0

У меня есть JFormattedTextField, который должен показывать 4 десятичных знака.Должен быть нажат на 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); 

И когда форма загружается, ее значение задается где-то (с использованием setText()), и оно не форматирует его. Например, он покажет 1.0 вместо 1.0000

Теперь вот странная (?) Часть ... если я нажму на нее, то, как только я щелкнул где-нибудь еще, форматирующий элемент начнет вставлять и форматировать его до 4 десятичных знаков ,

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

Спасибо!

ответ

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"); 

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

Обратите внимание, что если это не решит вашу проблему, рассмотрите возможность создания и публикации minimal example program.