繁体   English   中英

如何从自定义jtextfield检索double值

[英]How can I retrieve double value from custom jtextfield

我创建了一个自定义JTextFields,它只能接受数字值。

所以我有这个:

package com.mcsolution.common.Componenti_Swing;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import com.mcsolution.common.supporto.VisualMessage;


public class DoubleTextFieldFormat extends TextFieldFormat{

    /**
     * 
     */
    private static final long serialVersionUID = 8856130645860365803L;
    public DoubleTextFieldFormat(){
        addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char ch = e.getKeyChar();

                if (!isNumber(ch) && !isValidSignal(ch) && !validatePoint(ch)  && ch != '\b') {
                    e.consume();
                }
            }
        });

    }

    public DoubleTextFieldFormat(Font font,Boolean isSelectedAll,Integer horizzontalAlignment,
            Integer numberCharacter,String text,Dimension preferredSize,
            Boolean isEditable){

        if(font!=null)
            this.setFont(font);

        if(isSelectedAll){
            this.addFocusListener(new FocusListener() {
                public void focusGained(FocusEvent e){
                    selectAll();
                }
                public void focusLost(FocusEvent e){
                }
            });
        }
        if(horizzontalAlignment!=null)
            this.setHorizontalAlignment(horizzontalAlignment);

        if(numberCharacter!=null)
            this.setDocument(new PersonalizzaJtextField(numberCharacter));

        if(text!=null)
            this.setText(text);
        if(preferredSize!=null)
            this.setPreferredSize(preferredSize);

        if(isEditable!=null)
            this.setEditable(isEditable);

        addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                char ch = e.getKeyChar();

                if (!isNumber(ch) && !isValidSignal(ch) && !validatePoint(ch)  && ch != '\b') {
                    e.consume();
                }
            }
        });
    }

    private boolean isNumber(char ch){
        return ch >= '0' && ch <= '9';
    }

    private boolean isValidSignal(char ch){
        if( (getText() == null || "".equals(getText().trim()) ) && ch == '-'){
            return true;
        }

        return false;
    }

    private boolean validatePoint(char ch){
        if(ch != '.'){
            return false;
        }

        if(getText() == null || "".equals(getText().trim())){
            setText("0.");
            return false;
        }else if("-".equals(getText())){
            setText("-0.");
        }

        return true;
    }

    public Double getValue(){
        try{
            String valore = this.getText();
            valore= valore.replaceAll(",", ".");
            return Double.parseDouble(valore);
        }catch(Exception e){
            VisualMessage.getErrore();
            return null;
        }
    }
}

现在,如果要检索值,请使用以下代码:

Double val = myTextField.getValue();

此方法并非每次都有效。

例如,如果我有此错误,将这个值输入到TextField 1.900,50中。

如何转换此格式的值x.xxx,xx?

我已经解决了我的错误,我用以下方法更改了getValue()方法:

public Double getValue(){
    try{
        NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());
        //String valore = ;
        return nf.parse(this.getText()).doubleValue();

    }catch(Exception e){
        VisualMessage.getErrore();
        return null;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM