简体   繁体   English

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

[英]How do I keep a JFormattedTextField in non-overwrite mode?

I have a problem with JFormattedTextField, namely keeping it in non-overwriting mode. 我对JFormattedTextField有问题,即将其保持在非覆盖模式。 I found out how to set it to non-overwriting, namely with setOverwriteMode(false). 我发现了如何将其设置为非覆盖,即使用setOverwriteMode(false)。

However, although this function lets me type in the field without overwriting, when focus is lost and I re-enter the field, overWriteMode is on again! 但是,尽管此功能允许我在不覆盖的情况下键入字段,但是当焦点丢失并且我重新输入该字段时,overWriteMode再次打开!

Is there a way to keep overWriteMode false? 有没有办法保持overWriteMode为假? I would prefer a solution which doesn't set it to false everytime I lose focus, but if that's the only possible solution, so be it. 我更喜欢一个不会​​在每次失去焦点时都将其设置为false的解决方案,但是如果那是唯一可能的解决方案,那就这样吧。

This is what I've got now: 这就是我现在得到的:

    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!

I hope someone can help me! 我希望有一个人可以帮助我!

Solution, as proposed by 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);

Thanks for the help! 谢谢您的帮助! Regards 问候

shot to the dark, is there something that I missed 拍摄到黑暗中,我错过了什么吗

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM