天天看點

利用JFormattedTextField建立一個隻能輸入數字的文本框

由于項目需要某些文本框隻能輸入數字,但查了一下,swing好像沒有隻能輸入數字的文本框,在網上找了一下資料,利用JFormattedTextField的控件加keyReleased能實作,以下是自己實作的隻能輸入數字的文本框代碼,比較簡單,在這裡分享出來,也留着以後自己檢視。

代碼比較簡單,不作過多解釋

import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author Administrator
 */
public class JFormattedText extends JFrame {

    private JFormattedTextField text;

    public JFormattedText() {
        JPanel panel = new JPanel();
        text = new JFormattedTextField(new java.text.DecimalFormat("#0"));
//        text = new JFormattedTextField();
//        text.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));
        text.setFont(new java.awt.Font("宋體", 0, 12)); // NOI18N
        text.setMaximumSize(new java.awt.Dimension(50, 21));
        text.setMinimumSize(new java.awt.Dimension(50, 21));
        text.setPreferredSize(new java.awt.Dimension(50, 21));
        text.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                String old = text.getText();
                JFormattedTextField.AbstractFormatter formatter = text.getFormatter();
                if (!old.equals("")) { 
                    if (formatter != null) {
                        String str = text.getText();
                        try {
                            long page = (Long) formatter.stringToValue(str);
                            text.setText(page + "");
                        } catch (ParseException pe) {
                            text.setText("1");//解析異常直接将文本框中值設定為1
                        }
                    }
                }
            }
        });
        panel.add(text);
        this.add(panel);
        this.setBounds(200, 100, 100, 100);
    }

    public static void main(String[] arg) {
        new JFormattedText().setVisible(true);
    }
}