我对JFormattedTextField有问题,即将其保持在非覆盖模式。 我发现了如何将其设置为非覆盖,即使用setOverwriteMode(false)。

但是,尽管此功能允许我在不覆盖的情况下键入字段,但是当焦点丢失并且我重新输入该字段时,overWriteMode再次打开!

有没有办法保持overWriteMode为假? 我更喜欢一个不会​​在每次失去焦点时都将其设置为false的解决方案,但是如果那是唯一可能的解决方案,那就这样吧。

这就是我现在得到的:

    DefaultFormatter format = new DefaultFormatter();
    format.setOverwriteMode(false);

    inputField = new JFormattedTextField();
    inputField.setValue("don't overwrite this!");
    inputField.setColumns(20);
    format.install(inputField);// This does the trick only the first time I enter the field!

我希望有一个人可以帮助我!

解决方案,由罗宾提出:

    DefaultFormatter format = new DefaultFormatter();
    format.setOverwriteMode(false);

    inputField = new JFormattedTextField(format); // put the formatter in the constructor
    inputField.setValue("don't overtype this!");
    inputField.setColumns(20);

谢谢您的帮助! 问候

#1楼 票数:2

拍摄到黑暗中,我错过了什么吗

import java.awt.GridLayout;
import java.math.RoundingMode;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.NumberFormatter;

public class MaskFormatterTest {

    public static void main(String[] args) throws Exception {
        NumberFormat format = NumberFormat.getNumberInstance();
        format.setMaximumFractionDigits(2);
        format.setMinimumFractionDigits(2);
        format.setParseIntegerOnly(true);
        format.setRoundingMode(RoundingMode.HALF_UP);

        NumberFormatter formatter = new NumberFormatter(format);
        formatter.setMaximum(1000);
        formatter.setMinimum(0.0);
        formatter.setAllowsInvalid(false);
        //formatter.setOverwriteMode(false);

        JFormattedTextField tf = new JFormattedTextField(formatter);
        tf.setColumns(10);
        tf.setValue(123456789.99);
        JFormattedTextField tf1 = new JFormattedTextField(formatter);
        tf1.setValue(1234567890.99);
        JFormattedTextField tf2 = new JFormattedTextField(formatter);
        tf2.setValue(1111.1111);
        JFormattedTextField tf3 = new JFormattedTextField(formatter);
        tf3.setValue(-1111.1111);
        JFormattedTextField tf4 = new JFormattedTextField(formatter);
        tf4.setValue(-56);

        JFrame frame = new JFrame("Test");
        frame.setLayout(new GridLayout(5, 0));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(tf);
        frame.add(tf1);
        frame.add(tf2);
        frame.add(tf3);
        frame.add(tf4);
        frame.pack();
        frame.setVisible(true);
    }
}

  ask by Tim Kuipers translate from so

未解决问题?本站智能推荐:

1回复

如何将格式设置为JFormattedTextField

我想使用可以输入分数的JFormattedTextField 。 正如Java doc指定的那样,其格式应在构造函数中设置。 但是我使用的是NetBeans IDE, JFormattedTextField的构造函数是生成的代码,所以我不知道如何指定格式。 如果可以的话,请引导我到有用
2回复

如何将BigDecimal与JFormattedTextField一起使用

我有一个领域: 我使用其setValue()方法为其分配BigDecimal值,并允许用户使用此文本字段修改该值。 然后在lostFocus方法中,就行了: 我得到以下异常: 有什么问题吗? 如何修改我的代码以摆脱此错误?
1回复

具有初始值的JFormattedTextField,可以逐个符号覆盖

我有这样简单的代码,它创建了JFormattedTextField,其中应该包含生日(仅将数字除以连字符): 但是如何按顺序创建birthDate将包含初始值“ dd-mm-yyyy”。 我知道有一个像这样的事情setPlaceholder("some string")但是当我使用它
1回复

JFormattedTextField问题

1)如何将Cursor设置为0,而不使用Caret或Focus包装到invokeLater()(使用@camickr 格式文本字段提示可以解决),是否有人知道另一种方式 2) How to reset Formatter有时How to reset Formatter (通过TAB从键
3回复

只读JFormattedTextField

假设JFormattedTextField已启用并且包含格式化程序,是否有办法将其设置为只读? 使用JTextField ,我们只需要提供一个自定义Document并在那里进行所有控制,但是使用JFormattedTextField,我想事情就有些复杂了,因为我们不想弄乱它的文档过滤器。 我
1回复

从JTextField到JFormattedTextField

在NetBeans中,我创建了一个包含许多JTextField的项目。 现在我知道我应该验证它。 是否可以将文本字段“投射”到JFormattedTextField ?
1回复

结合JSpinner和JFormattedTextField

我想制作一个自定义的JSpinner来编辑白天的时间。 我希望格式为1HH:mm:ss a1,我已经知道了。 我还想添加JFormattedTextField一些功能: setplaceHolderCharacter('_') 例如,时间是09:23:45,当用户删除09时
1回复

为什么JFormattedTextField恢复以前的值?

我正在使用JFormattedTextField,当我尝试删除字段中的值时,它会自动恢复以前的值。 这种行为的原因是什么?如何阻止它恢复价值? 这是JFormattedtextField的代码。