java - 如何使 JSpinner 对象的全部内容突出显示,以便在获得焦点时用户输入不需要删除?

标签 java user-interface jspinner

对于标题问题没有太多可补充的。

以下是按 Tab 键切换到第一个框的样子,将光标放在字段中的第一个字符之前,这样如果用户希望输入自己的月、日或年数字,则必须删除该字符:

enter image description here

这就是我想要的,当字段被选项卡切换到(或以其他方式选择)时,这样用户如果希望输入自己的年份等,则不必删除显示的字符:

enter image description here

我可以为 JTextField 完成此操作,如下所示:

txtDateFrom.select(0,99);

但是 .select() 不是 JSpinner 的方法。

(我意识到这提出了一个问题,“为什么使用旋转器?”但明显的答案是我希望两种选择方法都可用,就像设计中常见的那样。 )

(一个不那么紧迫但相关的问题...我创建了一个包含 100 年日期的整数数组 [例如 2014],名为 years 并使用 SpinnerListModel(years) 因为当使用 SpinnerNumberModel 时,一年将显示为 2,014。我可以接受我所做的,但是有没有更简单的方法?没有包含“format”的方法我可以找到这个方法。)

最佳答案

这适用于 Java 1.7.0_51、Windows 和 Linux。我没有能力在 OS X 中测试它。

JSpinner.DefaultEditor editor =
    (JSpinner.DefaultEditor) spinner.getEditor();

editor.getTextField().addFocusListener(new FocusAdapter() {
    @Override
    public void focusGained(FocusEvent event) {
        final JTextField textField = (JTextField) event.getComponent();
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        textField.selectAll();
                    }
                });
            }
        });
    }
});

旁注:您是否考虑过用这样的单个 JSpinner 替换您的三个 JSpinner?

JSpinner spinner = new JSpinner(new SpinnerDateModel());
spinner.setEditor(new JSpinner.DateEditor(spinner, "MM/dd/yyyy"));

向上/向下箭头按钮(和箭头键)将更改包含文本光标的字段。

它不会解决您的注意力问题,但您可能会认为这个问题不是什么问题。

关于java - 如何使 JSpinner 对象的全部内容突出显示,以便在获得焦点时用户输入不需要删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225401/

相关文章:

java - 如何使用已实现的 Setters 正确更改 SpinnerNumberModel 的最大值和最小值

java - 使用 Windows 7 与 Mac OS X 的 Eclipse 中的图像路径

java - tomcat 7 如何让 jdbc 连接永远保持 Activity 状态

java - 迭代 XPath 以仅获取表名

Android 按钮状态以编程方式在 Java 中(不是 XML)

java - 为多个按钮提供相同的actionListener

用于主题化 UI 的 CSS 样式库

java - 我如何通知用户他输入的值已被限制为 JSpinner 下限?

java - 设置 JSpinner 倒计时器

java - Spring MVC 在带点的 URL 上返回 HTTP 406