Tôi có một ứng dụng Java dành cho máy tính để bàn nhỏ sử dụng Swing. Có một hộp thoại nhập dữ liệu với một số lĩnh vực đầu vào của các loại khác nhau (JTextField, JComboBox, JSpinner, JFormattedTextField). Khi tôi kích hoạt JFormattedTextFields hoặc bằng cách duyệt qua biểu mẫu hoặc bằng cách nhấp vào nó bằng chuột, tôi muốn nó chọn tất cả văn bản mà nó hiện đang chứa. Bằng cách đó, người dùng chỉ có thể bắt đầu nhập và ghi đè các giá trị mặc định.Làm thế nào để chọn tất cả văn bản trong một JFormattedTextField khi nó được tập trung?
Tôi có thể làm như thế nào? Tôi đã sử dụng một FocusListener/FocusAdapter mà gọi selectAll() trên JFormattedTextField, nhưng nó không chọn bất cứ điều gì, mặc dù phương thức focusGained() của FocusAdapter được gọi (xem mẫu mã bên dưới).
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();
}
});
Bất kỳ ý tưởng nào? Điều thú vị là việc chọn tất cả các văn bản của nó rõ ràng là hành vi mặc định cho cả JTextField và JSpinner, ít nhất là khi tabbing thông qua biểu mẫu.
Cảm ơn, đó là nó. Tôi chỉ có thể đoán rằng NumberFormatter đang làm một cái gì đó mà undoes selectAll()? –
Vâng. Nó định dạng giá trị và đặt lại văn bản. –
+1 Cần thiết này, không thể nhớ ngay lập tức làm thế nào để làm điều này tự của tôi, googled và ngay lập tức tìm thấy câu trả lời này. Cảm ơn! –