2014-09-02 111 views
0

我想使用來自JTextField的輸入,並將其變成雙'因爲我會在我的程序中使用數學公式中的輸入..但是當我嘗試運行代碼時,它給出一個錯誤..我想我得到了錯誤的解析方式..任何幫助?謝謝!如何將輸入從JTextField轉換爲double。輸入值來自用戶

xLabel = new JLabel("Subject"); 
    xTF = new JTextField(4); 
    xTF.addKeyListener(new KeyHandler()); 
    xString = xTF.getText(); 
    xDouble = Double.parseDouble(xString); 
+0

你的代碼示例說明的搖擺(和GUI環境一般)是如何工作的,考慮提供一個[可運行示例](https://stackoverflow.com/help/mcve),這表明你的問題可能的誤解。這將導致更少的混亂和更好的反應 – MadProgrammer 2014-09-02 04:26:23

+0

您在文本字段中輸入的內容類型的字符串,它包含數字只有12345或12ASDA,是U越來越java.lang.NumberFormatException – mussdroid 2014-09-02 07:53:44

回答

0

通過在字符串中使用TRIM()可以刪除任何空白

xDouble = Double.parseDouble(xString.trim()); 

如果我假設xString是一個有效的字符串和xDouble是Double類型

0

您應該使用parseDouble(String s)與此相關的例外是NumberFormatException

java.lang.Double.parseDouble()方法返回一個新的雙精度型 ,初始化爲由指定String表示的值,如由類Double的valueOf方法完成 。

例如:

public class Main { 
    public static void main(String[] args) { 
    String str = "50.00001"; 
    double retval =Double.parseDouble(str); 
    System.out.println("Value = " + retval); 
    } 
} 
  1. how to convert String to Double
  2. Source for sample code
  3. Source for Paragraph
0

這看起來不錯,你在正確的價值觀在你的文本框,你測試前輸入它?舉例來說,如果你把它留空或鍵入「1,3」,它不會接受它。

編輯:我只是做了一個試驗,正如我所說的,它只接受這樣的價值觀:「1.3」

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 


public class MyApp extends JFrame implements ActionListener { 

JTextField textField; 
JLabel label; 
JButton okButton; 

public MyApp() { 
    textField = new JTextField(4); 
    label = new JLabel("N/A"); 
    okButton = new JButton("Ok"); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setLayout(new BorderLayout()); 

    add(textField, BorderLayout.NORTH); 
    add(label, BorderLayout.CENTER); 
    add(okButton, BorderLayout.SOUTH); 
    okButton.addActionListener(this); 


    pack(); 

} 

public static void main(String[] args) { 
    MyApp app = new MyApp(); 

    app.setVisible(true); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == okButton) { 
     double d = 0; 
     d = Double.parseDouble(textField.getText()); 
     label.setText(String.valueOf(d)); 
    } 

    } 
} 
+2

只是友好的建議,我知道你做小額已足夠的聲譽,但這不是一個答案。 – 2014-09-02 04:26:45

+0

我的目標是幫助不要得到一些愚蠢的觀點。我只是做了一個測試,以確保我說的是正確的。 – Anas 2014-09-02 04:33:04

+0

我不是故意讓你不高興,請不要個人。我只是指出了這個網站的一個規則,但如果你認爲這是一個答案,那對我來說很好。你可以添加更多的信息和格式化你的文章,所以你可以有更好的機會投票祝你好運:) – 2014-09-02 04:34:30

2
  1. 不要在文本組件使用KeyListener,使用DocumentFilter,採取請查看Implementing a Document FilterDocumentFilter Examples以瞭解更多詳情
  2. 您可以改用InputVerifier。有關更多詳細信息,請參見Validating Input
  3. 您可以改用JFormmattedFieldJSpinner。詳情參見How to Use Formatted Text FieldsHow to Use Spinners

這很難說,但要記住,你是在一個事件驅動的環境中運行,直到用戶做一些事情,你不應該試圖讓一個場

的價值
相關問題