簡體   English   中英

用戶在字段中輸入時,在文本字段中添加$符號

[英]Adding $ sign into the textfield when the user enter in the field

當用戶在字段中輸入$並禁止用戶取消$符號時,任何人都知道如何自動將$符號添加到文本字段中。

並非“嚴格”地詢問您的要求,而是從如何使用出席文本字段開始 ,例如...

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

問題是用戶可能會刪除$符號,並且驗證非常嚴格,這意味着輸入字段中的文本必須以$開頭

另一種可能性是使用Swing Labs的SwingX庫中的BuddySupport API

好友支持

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

這意味着$是與實際字段分開的組成部分,用戶無法刪除(但包含在字段中,因此不受父容器的布局管理器的影響)

通過為TextEvent添加TextListener,可以監視java.awt.TextField的更改。 在基於JTextComponent的組件中,更改從模型通過DocumentEvent廣播到DocumentListeners。 DocumentEvent提供更改的位置和更改的種類(如果需要)。

您需要使用DocumentListener並將其與某些Regex結合使用以完成魔術。 如果給定點的文本與所需的格式不匹配,請不要更新JTextField 或僅使用.charAt()方法即可,但由您自己決定

沒有DocumentListener的 SSCCE

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM