java - 如何将 JFormattedTextField 保持在非覆盖模式?

标签 java swing jformattedtextfield overwrite

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

但是,尽管此功能允许我在字段中键入而不覆盖,但是当失去焦点并且我重新进入该字段时,overWriteMode 再次打开!

有没有办法让 overWriteMode 保持 false?我更喜欢一种解决方案,它不会在我每次失去焦点时都将其设置为 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!

我希望有人能帮助我!

Robin 提出的解决方案:

    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);

感谢您的帮助! 问候

最佳答案

射向黑暗,有没有我漏掉的东西

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);
    }
}

关于java - 如何将 JFormattedTextField 保持在非覆盖模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459088/

相关文章:

java - 使用计时器增加 JTextField 中的值

java - JFormattedTextField 格式化百分比数字?

java - 如何使用 Gson 将 JSON 字符串属性读取到自定义类对象中?

java - PropertyPlaceholderConfigurers 在参数化 DataSource bean 之后加载

java - 如何使用java从字符串中删除一个字符

java - 为基于Wildfly容器的身份验证生成加盐/散列密码

java - 禁用 JPanel 的子项

java - 如何对齐两个JButton以使其右对齐?

java - Jframe 内的 JPanel

java - 防止 JTextField 中出现字母数字