我遇到了JFormattedTextField问题,即保持非覆盖模式。我发现了如何将其设置为非覆盖,即使用setOverwriteMode(false)。
但是,虽然此功能允许我在不覆盖的情况下输入字段,但当焦点丢失并且我重新进入字段时,overWriteMode再次打开!
有没有办法让overWriteMode保持错误?我希望每次失去焦点时都不会将其设置为假的解决方案,但如果这是唯一可行的解决方案,那就这样吧。
这就是我现在所拥有的:
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);
感谢您的帮助! 此致
答案 0 :(得分: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);
}
}