JFormattedTextField删除用户输入

时间:2012-11-27 09:53:00

标签: java swing user-interface jformattedtextfield

我有以下代码:

public test() {
    setLayout(new FlowLayout());
    JFormattedTextField price = new JFormattedTextField(new DecimalFormat("#,##0.00 \u00A4"));
    price.setValue(new Float(105.00));
    add(price);
    add(new JButton("Ok"));

    pack();
    setVisible(true);

}

如果我现在输入一个数字,例如'20'。文本字段再次输入“105.00”。 为什么它不接受我的输入并且总是回到默认值?

2 个答案:

答案 0 :(得分:2)

你的十进制格式无法正常工作。

尝试删除

之后20€的作品

但请注意,您仍然需要在数字

后输入空白和€符号

答案 1 :(得分:2)

有三种方式从最简单的开始,以无用的方式结束,与第1和第2点相比可能是无意义的。

  • NumberFormat.getCurrencyInstance();使用NumberFormat.getCurrencyInstance(Locale);Currency symbol,然后此值对具体JTextField / JFormattedTextField / JSpinner / {{1}有效} / XxxCellRenderer

XxxCellEditor

  • 应用自己的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(); NumberFormat format = NumberFormat.getCurrencyInstance(); format.setMaximumFractionDigits(2); format.setMinimumFractionDigits(2); format.setParseIntegerOnly(true); format.setRoundingMode(RoundingMode.HALF_UP); NumberFormatter formatter = new NumberFormatter(format); formatter.setMaximum(1000.0); 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); } } ,固定的可能在NavigationFilter / JTextField / JFormattedTextField / JSpinner / {/ 1}} / XxxCellRenderer / XxxCellEditor / //@see & read http://stackoverflow.com/questions/7421337/limited-selection-in-a-jtextfield-jtextcomponent import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class NavigationFilterPrefixWithBackspace extends NavigationFilter { private int prefixLength; private Action deletePrevious; public NavigationFilterPrefixWithBackspace(int prefixLength, JTextComponent component) { this.prefixLength = prefixLength; deletePrevious = component.getActionMap().get("delete-previous"); component.getActionMap().put("delete-previous", new BackspaceAction()); component.setCaretPosition(prefixLength); } @Override public void setDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) { fb.setDot(Math.max(dot, prefixLength), bias); } @Override public void moveDot(NavigationFilter.FilterBypass fb, int dot, Position.Bias bias) { fb.moveDot(Math.max(dot, prefixLength), bias); } class BackspaceAction extends AbstractAction { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { JTextComponent component = (JTextComponent) e.getSource(); if (component.getCaretPosition() > prefixLength) { deletePrevious.actionPerformed(null); } } } public static void main(String args[]) throws Exception { JTextField textField = new JTextField("Prefix_", 20); textField.setNavigationFilter(new NavigationFilterPrefixWithBackspace(7, textField)); JFrame frame = new JFrame("Navigation Filter Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(textField); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } } /中的可能性(偏见)开始或结束InputMask

InputVerifier

  • 使用JTextField创建自己的JFormattedTextField,每个JSpinner / XxxCellRenderer / XxxCellEditor / {{的工作变得可能/不同1}} / {{1}},