如何在java中为JTextField制作坐标格式

如何在java中为JTextField制作坐标格式,java,Java,纬度:43324523经度:34958140 我使用这里提供的IntegerField 我可以解析数字以获得我喜欢的格式,但在帧屏幕中我需要它。用户键入时(不输入点或逗号) 但我如何才能做到这一点 这是我想编辑的框架 但这不是我喜欢的格式。当你阅读代码时,你就会明白我的意思 第三个屏幕截图是用这个代码拍摄的 DecimalFormat format = new DecimalFormat("##,####"); format.setGroupingUsed(true); NumberForma

纬度:43324523经度:34958140

我使用这里提供的IntegerField

我可以解析数字以获得我喜欢的格式,但在帧屏幕中我需要它。用户键入时(不输入点或逗号)

但我如何才能做到这一点

这是我想编辑的框架

但这不是我喜欢的格式。当你阅读代码时,你就会明白我的意思

第三个屏幕截图是用这个代码拍摄的

DecimalFormat format = new DecimalFormat("##,####");
format.setGroupingUsed(true);
NumberFormatter formatter = new NumberFormatter(format);
formatter.setValueClass(Integer.class);                  
formatter.setMaximum(Integer.MAX_VALUE);
formatter.setAllowsInvalid(false);

IntegerField minField = new IntegerField();
JFormattedTextField maxField = new JFormattedTextField(formatter);

纬度和经度不是整数值,我猜;) 仅使用两个带标签的JTextField,一个用于经度,另一个用于纬度

整数值基本上是由0到9和负数组成的字符串
要进行浮动,您只需要接受“.”

GUI将包含2个JLabel和2个JTextFields,排列方式与您的示例类似

Latitude: 43,324523    Longitude: 34,958140
您可以使用以下代码在JTextFields中测试double:

public double convertTextToDouble(String text) {
    try {
        return Double.valueOf(text);
    } catch (NumberFormatException e) {
        return Double.MIN_VALUE;
    }
}
如果文本是有效的double,则返回double值。如果文本不是有效的double,则返回最小double值


通常,您不会使用异常来测试无效值。在这种情况下,您应该这样做,因为异常已经存在。

好的,我找到了解决方案。MaskFormatter很好地处理了这个问题。尽管如此,任何其他想法都将不胜感激

MaskFormatter latitudeformat=new MaskFormatter("##.######");
MaskFormatter longitudeformat=new MaskFormatter("###.######");
latitudeformat.setPlaceholderCharacter('0');
latitudeformat.setOverwriteMode(true);
longitudeformat.setPlaceholderCharacter('0');
longitudeformat.setOverwriteMode(true);    

JFormattedTextField latitudeField = new JFormattedTextField(latitudeformat);
JFormattedTextField longituteField = new JFormattedTextField(longitudeformat);

但我想让用户只能输入数字。所以我使用了jformattedtextfield。这正是文本字段对于=]的作用,当数据的格式类似于日期或时间,但读取数值时使用格式化文本字段JTextField更合适;你所要做的就是这个txtField1=新的JTextField(10);double value=double.parseDouble(txtField1.getText());看不,你搞错我了。在框架中,我希望允许用户在字段中输入任何字符串。用户可以按您的方式输入字符串。@NicoT将尝试这样做,但问题是格式化,而不是只接受整数:Dthanks用于答复。但这不是我想要的。为了更清楚,我编辑了这篇文章。对不起,英语水平低。经度从-180度到+180度。你只分配了两位数。@GilbertLeBlanc是的,我知道只是复制粘贴。但这只是我找到的解决办法。用这种方法我也不能加负数。。编辑了答案。顺便说一句,先生,你知道如何改进这个答案,使之真正能够在-90到+90和-180到+180的范围内插入纬度和经度。mask格式不是为一般的双输入而设计的。我知道+和-没有掩码字符。虽然这段代码可以回答这个问题,但提供关于如何以及为什么解决问题的信息可以提高其长期值。传递给构造函数的掩码*#########期望第一个字符是任何字符,而其余字符是数字。有关此链接的详细信息。我们通过进一步设置有效字符来进一步限制要输入的字符。因此,第一个字母的值只能为+-或任何数字
MaskFormatter latitudeformat=new MaskFormatter("*##.######");
**latitudeformat.setValidCharacters("-+1234567890");**
MaskFormatter longitudeformat=new MaskFormatter("*###.######");
**longitudeformat.setValidCharacters("-+1234567890");**
latitudeformat.setPlaceholderCharacter('0');
latitudeformat.setOverwriteMode(true);
longitudeformat.setPlaceholderCharacter('0');
longitudeformat.setOverwriteMode(true);