我已经实现了Jspinner,其中我添加了mouseClicked Listener,它将微调器设置为当前日期时间,但在成功提交后,微调器需要设置为空白,这工作正常,但是当我第二次点击微调器然后它显示旧值以及mouseClicked Listener未被调用为什么? 注意:我使用SpinnerDateModel作为微调器。
private void spinnerMouseClicked(java.awt.event.MouseEvent evt) {
spinner.setModel(new SpinnerDateModel(new Date(), null, null, Calendar.HOUR_OF_DAY));
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm");
((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(format)));
((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
if (0 == ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getCaretPosition()) {
if (((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().getText().length() > 13) {
((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setCaretPosition(13);
}
}
}
});
}
private void submit(){
((JSpinner.DefaultEditor) spinner.getEditor()).getTextField().setText(null);
}
答案 0 :(得分:1)
在多次阅读问题后,我认为最终得到你想要完成的事情:每次用户总结信息时必须清除文本,但是当用户再次聚焦微调器时,它必须显示今天的日期。不是吗?
如果是,那么我建议您不要在MouseListener
上使用JSpinner
,而是将FocusListener附加到微调器的编辑器上。像这样:
SpinnerDateModel model = new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_WEEK);
final JSpinner spinner = new JSpinner(model);
final JTextField editor = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
editor.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
if(editor.getText().isEmpty()){
spinner.getModel().setValue(new Date());
}
}
});
JButton submit = new JButton("Submit");
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
editor.setText("");
}
});
这样你就拥有了这些优势:
MouseListener
。