问题:当单击 dateSpin
箭头时,微调器会更改年而不是天。我想将其设为默认值,以便仅更改日期+使其用户无法在微调器字段中输入自己的输入。
import javax.swing.*;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.util.Calendar;
import java.util.Date;
public class Test1 extends JFrame
{
public static void main(String[] args)
{
Test1 frame1 = new Test1();
frame1.setVisible(true);
}
public Test1()
{
super("Test");
setLayout(new FlowLayout());
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
JSpinner spinner = new JSpinner();
Date date = new Date();
spinner.setModel(new SpinnerDateModel(date, null, null, Calendar.DAY_OF_MONTH));
JSpinner.DateEditor dateEditor = new JSpinner.DateEditor(spinner, "yyyy/MM/dd");
spinner.setEditor(dateEditor);
add(spinner);
}
}
在oracle文档中提到了这个问题:
Note, however, that some types of look and feel ignore the specified field, and instead change the field that appears selected.
但是,由于我对 Java 不太流利,所以我不知道如何解决这个问题。
最佳答案
这不是一个好的解决方案,但您可以确保文本字段的插入符号位置始终位于末尾(您希望旋转器不可编辑的事实可能使此技术更容易容忍):
dateEditor.getTextField().setEditable(false);
dateEditor.getTextField().addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
int pos = dateEditor.getTextField().getDocument().getLength();
if (e.getDot() != pos) {
dateEditor.getTextField().setCaretPosition(pos);
}
}
});
<小时/>
这对我使用以下 LaF 有效:Metal
、Nimbus
、Motif
、Windows
、Windows 经典
。 (这就是我现在可以测试的所有 LaF)
关于java - JSpinner 默认更改年而不是天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484729/