簡體   English   中英

輸入JTextField后如何實時檢查異常

[英]How can I real time check for exceptions after JTextField has been entered

假設我有一個輸入字段,僅在按下提交按鈕時才接受Int

我該怎么說呢?如果該字段不是int禁用按鈕。

忽略“ Add Number按鈕是無關緊要的。

在此處輸入圖片說明

在此處輸入圖片說明

可以像這樣使用DocumentListener

    Document document = jTextFiled.getDocument();
    document.addDocumentListener(new DocumentListener() {

        @Override
        public void insertUpdate(DocumentEvent e) {
            check();
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            check();
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            check();
        }

        private void check() {
            if (!isInteger(jTextFiled.getText())) {
                jButton.setEnabled(false);
            } else {
                jButton.setEnabled(true);
            }
        }

    });

正如其他人已經說過的那樣, JFormattedTextField是執行此操作的最佳方法。 您需要自定義格式化程序的valueToString方法,因為NumberFormat通常會忽略尾隨字符:

final JButton acceptButton = new JButton("Add Volume");
acceptButton.setEnabled(false);

NumberFormat format = NumberFormat.getIntegerInstance();

NumberFormatter formatter = new NumberFormatter(format) {
    @Override
    public Object stringToValue(String text)
    throws ParseException {
        ParsePosition pos = new ParsePosition(0);
        Object value = getFormat().parseObject(text, pos);
        if (value != null && pos.getIndex() >= text.length()) {
            return value;
        }
        throw new ParseException(text, pos.getErrorIndex());
    }
};
formatter.setCommitsOnValidEdit(true);
formatter.setAllowsInvalid(true);

JFormattedTextField field = new JFormattedTextField(formatter);
field.setFocusLostBehavior(JFormattedTextField.COMMIT);

field.addPropertyChangeListener("editValid",
    new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent event) {
            boolean valid = (Boolean) event.getNewValue();
            acceptButton.setEnabled(valid);
        }
    });

暫無
暫無

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

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