Swing'i kullanan küçük bir Java masaüstü uygulamasına sahibim. Farklı tiplerdeki bazı giriş alanlarına (JTextField, JComboBox, JSpinner, JFormattedTextField) sahip bir veri girişi diyaloğu vardır. JFormattedTextFields'ı formda sekme yaparak veya fareyle tıklatarak etkinleştirdiğimde, içerdiği tüm metni seçmesini isterim. Bu şekilde, kullanıcılar sadece yazmaya başlayıp varsayılan değerlerin üzerine yazabilir.Odaklandığı zaman JFormattedTextField'taki tüm metinler nasıl seçilir?
Bunu nasıl yapabilirim? Ben FocusAdapter'ın focusGalined() yöntemi çağrılsa da (aşağıdaki kod örneğine bakın), JFormattedTextField üzerinde selectAll() çağıran bir FocusListener/FocusAdapter kullanmıştım.
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();
}
});
Herhangi bir fikir? Komik olan şey, metnin tümünün seçilmesi, en azından formda sekmelerken hem JTextField hem de JSpinner için varsayılan davranıştır.
pricePerLiter.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
pricePerLiter.selectAll();
}
});
}
});
sayesinde o kadar. Ben sadece NumberFormatter selectAll()? –
Evet öyle. Değeri biçimlendirir ve metni sıfırlar. –
+1 Buna ihtiyacım vardı, bunu nasıl yapamayacağımı anında hatırlayamadım, kendim googled ve hemen bu cevabı buldum. Teşekkürler! –