2011-03-29 23 views
-1
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
class math 
{ 
    JFrame jf; 
    JTextField jt; 
    JButton jb; 
    JButton jb1; 
    math() 
    { 
     jf=new JFrame("frame"); 
     jf.setSize(200,200); 
     jf.setVisible(true); 
     jt=new JTextField(50); 
     jf.setLayout(new FlowLayout()); 
     JButton jb=new JButton("30"); 
     JButton jb1=new JButton("sin"); 
     jb.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       jt.setText("30"); 
      } 
     }); 
     jb1.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       String s=jt.getText(); 
       double x=Double.parseDouble(s); 
       double s1=Math.sin(x); 
       jt.setText(s1); 
      } 
     }); 
     JButton jb2=new JButton("cos"); 
     jf.add(jt); 
     jf.add(jb); 
     jf.add(jb1); 
     jf.add(jb2); 
    } 
    public static void main(String args[]) 
    { 
     new math(); 
    } 
} 
//its giving error that double can't be applied to jt.setText 
+0

什麼是完整的例外,該計劃拋出? – 2011-03-29 13:12:15

+0

使用'jt.setText(s1 +「」);''或'jt.setText(String.valueOf(s1));' – 2011-03-29 13:12:47

+0

OP發佈了後續問題,但已關閉:http://stackoverflow.com/問題/ 5476258 /程序-IS-未給予期望的輸出 – Pops 2011-03-29 17:15:55

回答

2

javax.swing.text.JTextField.setText(java.lang.String)接受String。您可以通過編寫此得到s1一個String表示:

jt.setText(Double.toString(s1));

現在,可以說是

jt.setText(String.valueOf(s1));

jt.setText(s1 + "");

是更好的選擇,因爲既不需要如果y變化ou重構s1爲其他類型。

就我個人而言,我總是發現第三個選擇,字符串與空字符串連接,有點不雅觀的黑客。

5

setText該方法採用一個String,而不是一個double

通過致電Double.toString(someDouble),您可以從double中獲得一個字符串。

1

的錯誤是不言自明,我認爲:

double s1=Math.sin(x); 
jt.setText(s1); 

的「的setText()」方法不希望兩倍的說法,因爲你在這裏給它;它想要一個字符串。因此,轉換你的雙爲字符串,並且它會工作:

double s1=Math.sin(x); 
jt.setText(String.valueOf(s1)); 
0

TextComponent類的setText方法希望它的參數是String類型的這樣的雙重你想它需要被轉換成通過一個字符串。

變化

jt.setText(s1); 

jt.setText(Double.toString(s1));