Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JSpinner对象突出显示其全部内容,以便在获得焦点时不需要删除用户输入?_Java_User Interface_Jspinner - Fatal编程技术网

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

Java 如何使JSpinner对象突出显示其全部内容,以便在获得焦点时不需要删除用户输入?,java,user-interface,jspinner,Java,User Interface,Jspinner,标题问题没什么可补充的 以下是切换到第一个框的情况,光标位于字段中的第一个字符之前,因此,如果用户希望输入自己的月、日或年数,则必须删除该字符: 这是我想要的,当该字段被标记为(或以其他方式选择)时,用户不必删除显示的字符,如果他希望输入自己的年份,等等: 我可以为JTextField这样做,例如: txtDateFrom.select(0,99); 但是.select()不是JSpinner的方法 (我意识到这提出了一个问题,“为什么要使用微调器?”但显而易见的答案是,我希望两种选择方法

标题问题没什么可补充的

以下是切换到第一个框的情况,光标位于字段中的第一个字符之前,因此,如果用户希望输入自己的月、日或年数,则必须删除该字符:

这是我想要的,当该字段被标记为(或以其他方式选择)时,用户不必删除显示的字符,如果他希望输入自己的年份,等等:

我可以为
JTextField
这样做,例如:

txtDateFrom.select(0,99);
但是
.select()
不是
JSpinner
的方法

(我意识到这提出了一个问题,“为什么要使用微调器?”但显而易见的答案是,我希望两种选择方法都可用,这在设计中很常见。)


(一个不那么紧迫但相关的问题……我制作了一个名为
years
的100年日期的整数数组,并使用
SpinnerListModel(years)
因为当使用
SpinnerNumberModel
时,一年将显示为2014年。我可以接受我所做的事情,但有没有一种更简单的方法?没有一种方法包含“格式”,我可以找到这种方法。)

这在Java 1.7.0\u 51、Windows和Linux中工作。我没有能力在OSX中测试它

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"));
上/下箭头按钮(和箭头键)将更改包含文本光标的任何字段


它不会解决您的焦点问题,但您可能会认为该问题不是问题。

如果我使用已初始化为例如
01/18/2014
JTextField
,Java使双击“mm”或“dd”或“yyyy”变得非常用户友好mm/dd/yyyy字段的一部分突出显示该部分,以便用户输入内容覆盖选择内容而无需删除,例如01/
18
/2014。如果我的问题没有相对容易的解决方法,我可能会回复到上面的问题。我认为你的问题在这个可能的副本中得到了很好的描述。还有一个解决方案可能对您有效。@HovercraftFullOfEels——您认为这是一个重复的解决方案是对的。链接上的建议是危险的,很难遵循,所以我必须更仔细地研究它们。对于这样一个共同的需求,似乎要经历很多。我可能会接受VGR的两行注释,因为它使我的3-spinner方法看起来很幼稚,而且很容易按原样实现。DSlomer:VGR的建议与我提供的链接中Rob Camick的建议(camickr)没有什么不同,Rob的回答提供了比VGR更多的信息。昨天我本可以发布同样的内容,但我想为什么要重复已经发布的内容呢?这两个建议的问题是,虽然它们似乎适用于Windows平台,但它们不适用于大多数Mac电脑,这就是为什么程序员增加了额外延迟的原因。如果需要的话,Swing定时器也可以提供类似的延迟。如果我发布了链接中已经存在的内容,我深表歉意。我通读了一遍,看到了使用单个invokeLater的建议,看到了使用启发式延迟的建议,但实际上我没有看到任何使用两个invokeLater调用(一个在另一个内部)的建议。我很想知道双调用器方法在OS X中是否有效。@VGR——我是编辑新手,所以我需要做一些搜索和阅读,但我计划尝试一下你的两行“旁注”。谢谢。没花多长时间——我比我的3个纺纱机更喜欢它!多谢。我仍然需要阅读关于.setEditor等的内容。我昨晚在一篇文章中找到了它,但是这个示例没有两行,所以我推迟了。你的两行是天赐之物。我对得到null指针异常感到失望,但松了一口气,因为它很容易修复:
spinner.setValue(newdate())。。。这将今天的日期作为默认微调器值:01/20/2014#,其中“#”是微调器的上下对象。想象一下,我花了太多时间才意识到,在“MM/dd/yyyy”格式字符串中,大小写很重要,这让我感到惊讶!简而言之,“mm”代表分钟。除了我那愚蠢的举动,我喜欢你的“旁注”,因为它已经成为我的主注!太干净了!多谢!