私はSwingを使用する小さなJavaデスクトップアプリケーションを持っています。異なるタイプの入力フィールド(JTextField、JComboBox、JSpinner、JFormattedTextField)を持つデータ入力ダイアログがあります。 JFormattedTextFieldsをフォームのタブ移動またはマウスでクリックすることでアクティブにすると、現在含まれているすべてのテキストを選択したいと思います。そうすれば、ユーザーは入力を開始してデフォルト値を上書きすることができます。JFormattedTextFieldでフォーカスを取得すると、すべてのテキストを選択するにはどうすればよいですか?
どうすればいいですか?私はJFormattedTextFieldでselectAll()を呼び出すFocusListener/FocusAdapterを使用しましたが、FocusAdapterのfocusGained()メソッドが呼び出されましたが、何も選択しません(下記のコードサンプルを参照)。
private javax.swing.JFormattedTextField pricePerLiter;
// ...
pricePerLiter.setFormatterFactory(
new JFormattedTextField.AbstractFormatterFactory() {
private NumberFormatter formatter = null;
public JFormattedTextField.AbstractFormatter
getFormatter(JFormattedTextField jft) {
if (formatter == null) {
formatter = new NumberFormatter(new DecimalFormat("#0.000"));
formatter.setValueClass(Double.class);
}
return formatter;
}
});
// ...
pricePerLiter.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
pricePerLiter.selectAll();
}
});
面白いのは、少なくとも、フォームをタブで移動するときに、JTextFieldとJSpinnerのデフォルトの動作が、すべてのテキストを選択することが明らかです。
おかげで、それはそれです。私は、NumberFormatterがselectAll()を取り消す何かをしているとしか推測できませんか? –
はい、あります。値をフォーマットし、テキストをリセットします。 –
+1これが必要でした。瞬時にこのことを自分のやり方で覚えていなかったので、グーグルがすぐにこの答えを見つけました。ありがとう! –