【问题标题】:JSpinner default changes years instead of daysJSpinner 默认更改年份而不是几天
【发布时间】:2016-07-20 15:29:56
【问题描述】:

问题:单击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 文档中提到了这个问题:

但请注意,某些类型的外观会忽略指定的字段,而是更改显示为选中的字段。

但是,由于我不精通 Java,我不知道如何解决这个问题。

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖minimal reproducible exampleShort, Self Contained, Correct Example
  • 我刚刚制作了一个 MCVE,其中在 Windows LAF 和(默认)Metal 外观和感觉中,年份首先发生了变化,因为它是关注的数字。当箭头指向这一天时,向上/向下按钮改变了这一天。
  • 这样,一旦我将它上传到 csv 文件中,我就必须对其进行操作并更改日期布局。我想我可以走那条路,但只是认为也许有一个明显的解决方案。也许马上专注于日子?
  • 不,我实际上删除了关于将日期移到第一部分的评论,因为我尝试过它,它显示了同时更改日期和年份的非常奇怪的行为! :P 自己试试吧..
  • 哦...好的 :) 我相信它可以通过构建自定义模型来改变,但是对于这样一个小东西来说这似乎很麻烦。

标签: java swing date awt jspinner


【解决方案1】:

这不是一个好的解决方案,但您可以确保文本字段的插入符号位置始终位于末尾(您希望微调器不可编辑的事实可能使这种技术更容易接受):

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 有效:MetalNimbusMotifWindowsWindows Classic。 (这就是我现在可以测试的所有 LaF)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2015-09-07
    相关资源
    最近更新 更多