当用户在字段中输入时,在文本字段中添加$ sign

时间:2014-02-01 08:31:24

标签: java swing textfield

当用户在字段中输入时,任何人都知道如何在文本字段中自动添加$ sign,并禁止用户取消$符号。

2 个答案:

答案 0 :(得分:2)

不严格"您要问的是什么,但首先要采用How to use for attend text fields,例如......

paymentField = new JFormattedTextField(NumberFormat.getCurrencyInstance());
paymentField.setValue(new Double(payment));
paymentField.setColumns(10);
paymentField.setEditable(false);

问题是用户可以删除$符号并且验证非常严格,这意味着输入到字段中的文本必须以$开头

另一种可能性是使用Swing Labs的BuddySupport API,SwingX库

BuddySupport

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(2);
paymentField = new JFormattedTextField(nf);
paymentField.setValue(100d);
paymentField.setColumns(10);
paymentField.setEditable(false);
BuddySupport.addLeft(new JLabel("$"), paymentField);

这意味着$是与实际字段不同的组件,不能被用户删除(但包含在字段中,因此它不受父容器的影响'布局经理)

答案 1 :(得分:1)

  

可以通过添加a来监视java.awt.TextField的更改   TextEvent的TextListener。在基于JTextComponent的组件中,   通过DocumentEvent从模型广播更改   DocumentListeners。 DocumentEvent提供更改的位置   如果需要,还有那种变化。

你需要使用DocumentListener并将其与某些Regex结合起来才能发挥魔力。如果给定点的文本与您想要的格式不匹配,请不要更新JTextField 或仅使用.charAt()方法,但这取决于您

SSCCE 没有DocumentListener

package stack;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class OhMyDollar {

    static JFrame frame;
    static JTextField field;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run(){
                frame = new JFrame("Useless Title");
                field = new JTextField("$", 30);
                frame.getContentPane().add(field);
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);

                field.addKeyListener(new KeyListener(){

                    @Override
                    public void keyPressed(KeyEvent event) {

                    }

                    @Override
                    public void keyReleased(KeyEvent event) {

                    }

                    @Override
                    public void keyTyped(KeyEvent event) {
                        StringBuffer text = new StringBuffer(field.getText());
                        StringBuffer dollar = new StringBuffer("$");
                        if(field.getText().isEmpty() || text.charAt(0)!='$'){
                            field.setText(dollar.append(text).toString());
                        }
                    }
                });
            }
        });
    }
}