Я изначально построил DatePicker.Диалоговое окно календаря откроется рядом с JTextField, как только человек нажмет на JtextField.Если человек хочет ввести дату, а не выбирать дату, он должен сначала закрыть открытый диалог, а затем ввести дату.
Вот как это выглядит:
public class DateTextField extends JTextField implements Observer {
public void update(Observable o, Object arg) {
Calendar calendar = (Calendar) arg;
DatePicker dp = (DatePicker) o;
setText(dp.formatDate(calendar));
}
public DateTextField() {
final Observer obs = this;
final JTextField tf = this;
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if(tf.isEditable()){
DatePicker dp = new DatePicker(obs);
Date selectedDate = dp.parseDate(tf.getText());
dp.setSelectedDate(selectedDate);
dp.start(tf);
}
}
});
}
Я не показал класс DatePicker, потому что это не проблема здесь.Проблема в том, что человеку было очень неприятно каждый раз закрывать диалоговое окно «Календарь» для ввода даты.Вместо этого я хотел удержать кнопку на боковой стороне JtextField, и только если человек нажмет на кнопку, появится диалоговое окно.
Но для этого мне понадобится DatePicker для расширения класса JPanel, и я мог бы расположить JTextfield и JButton рядом друг с другом.Но, к сожалению, класс DatePicker расширяет JtextField, и во всем моем приложении я ожидаю, что DatePicker будет JtextField.Существуют приведения из JComponent к JTextfield и вызовы get и setText () для этого DatePicker.
Если мне нужно изменить DatePicker для расширения формы JPanel, то это повредит моему приложению везде.Мне было интересно, смогу ли я как-нибудь одеть JTextfield, чтобы показать кнопку сбоку, нарисовав ее или что-то еще?Это возможно?