스윙을 사용하는 작은 자바 데스크톱 앱이 있습니다. 서로 다른 유형의 입력 필드가있는 데이터 입력 대화 상자가 있습니다 (JTextField, JComboBox, JSpinner, JFormattedTextField). 폼을 탭 이동하거나 마우스로 클릭하여 JFormattedTextFields를 활성화하면 현재 포함 된 모든 텍스트를 선택하고 싶습니다. 그렇게하면 사용자는 입력을 시작하고 기본값을 덮어 쓸 수 있습니다.JFormattedTextField가 포커스를 얻었을 때 모든 텍스트를 선택하는 방법은 무엇입니까?
어떻게하면됩니까? FocusAdapter의 focusGained() 메서드가 호출되었지만 (아래 코드 예제 참조) JFormattedTextField에서 selectAll()을 호출하는 FocusListener/FocusAdapter를 사용했지만 아무 것도 선택하지 않았습니다.
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의 기본 동작이라는 것입니다.
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();
}
});
}
});
덕분에, 그것 뿐이다. NumberFormatter가 selectAll()을 실행 취소하는 작업을 수행하고있는 것으로 추측 할 수 있습니까? –
예. 값을 형식화하고 텍스트를 다시 설정합니다. –
+1 필요, 즉시 내 자신을 수행하는 방법을 기억하지 못했습니다, 봤 거든 즉시이 대답을 발견. 감사! –