5

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!

誰かが私を助けてくれることを願っています!

ロビンが提案した解決策:

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

助けてくれてありがとう!よろしく

4

1 に答える 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);
    }
}
于 2012-09-17T12:52:15.270 に答える