2011-03-29 22 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));