У меня есть JFormattedTextField с DateFormat. формат "ддММгг". Этот формат обеспечивает быстрый ввод. При потере фокуса я хочу, чтобы текст в поле изменился на LocalDate, так как его легче читать:
Ввод: "200295". преобразование в LocalDate с помощью getValue() дает LocalDate от 20 февраля 1995 года. Это все хорошо, для текста "1995-02-25" (LocalDate.toString()
).
Когда поле теряет фокус, я хочу, чтобы текст, отображаемый в поле, изменился на LocalDate.toString()
без изменения фактического значения поля с 200295/20 февраля 1995 года.
Есть ли способ наложить текст на поле вместо изменения его значения/текста?
sscce того, что я думал до сих пор:
основной класс:
public class FormatDateTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TheFrame();
}
});
}
}
Класс кадра:
public class TheFrame extends JFrame{
JPanel panel;
JPanel textPanel;
JFormattedTextField dateField;
JButton button;
JTextArea textArea;
DateFormat format;
public TheFrame() {
button = new JButton("click");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//temporarily crates a date to be converted.
Date date = (Date) dateField.getValue();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// sends the different values of the textarea
textArea.append("The value: " + dateField.getValue() + "\n");
textArea.append("the Date: " + date.toString() + "\n");
textArea.append("the LocalDate: " + localDate.toString() + "\n");
}
});
//Sets the text to the localDate for prettyness
button.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent arg0) {
Date date = (Date) dateField.getValue();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
dateField.setText(localDate.toString());
}
@Override
public void focusGained(FocusEvent arg0) {
dateField.setText("");
}
});
textArea = new JTextArea();
panel = new JPanel();
textPanel = new JPanel();
panel.setLayout(new BorderLayout());
textPanel.setLayout(new BorderLayout());
//datefield and format
format = new SimpleDateFormat("ddMMyy");
dateField = new JFormattedTextField(format);
textPanel.add(textArea,BorderLayout.CENTER);
panel.add(dateField,BorderLayout.NORTH);
panel.add(button, BorderLayout.CENTER);
add(panel,BorderLayout.NORTH);
add(textPanel,BorderLayout.CENTER);
pack();
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}