2014-06-16 86 views
0

其實我是一個初學者,所以我試圖用Swing創建GUI,其中兩個輸入數字由用戶在兩個相應字段中填充,所以有一個新的文本字段,其中I想要添加2個輸入值。圖形用戶界面,使用Swing輸入文本字段

我想添加2個文本字段的整數並添加值和顯示在另一個文本字段。如何提取JTextField整數值到另一個JTextField

import java.io.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class GUI 
{ 
public JFrame f; 
    public JPanel p; 
    public JLabel l1,l2; 
    public JButton b1; 
    public JButton b2; 
    public JTextField t1; 
    public JTextField t2; 
    public JTextField t3; 
    public GUI() 
     { 
      f=new JFrame("hello world application"); 
      p=new JPanel(true); 
      l1=new JLabel("enter first number"); 
      t1=new JTextField(30); 
      l2=new JLabel("\n enter the second number"); 
      t2=new JTextField(30); 
      t3=new JTextField(30); 
      b1=new JButton("check here"); 
      b2=new JButton("clear all"); 
      //b1.addActionCommand1("checking...."); 
      //b2.addActionCommand2("clearing all input's ...."); 

     } 
    public void launch() 
     { 
      f.setSize(400,500); 
      p.add(l1); 
      p.add(t1); 
      p.add(l2); 
      p.add(t2); 
      p.add(t3); 
      p.add(b1); 
      p.add(b2); 
      f.pack(); 
      f.add(p); 

      //l.setFont(Times Roman); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      p.setSize(400,500); 
      p.setForeground(Color.red); 
      p.setBackground(Color.green); 
      f.setLayout(new BorderLayout()); 
      b1.addActionListener(new Button1handler(t1,t2,t3)); 
      b2.addActionListener(new Button2handler()); 
      f.setVisible(true); 


     } 
    public static void main(String a[]) 
     { 
      javax.swing.SwingUtilities.invokeLater(new Runnable() 
       { 
        public void run() 
         { 
          GUI br=new GUI(); 
          br.launch(); 

         } 
       }); 
     } 
} 

class Button1handler implements ActionListener 
{ 

       private JTextField t1; 
    private JTextField t2; 
    private JTextField t3; 
      public Button1handler(JTextField t1, JTextField t2, JTextField t3) 
        { 
        this.t1 = t1; 
        this.t2 = t2; 
        this.t3 = t3; 
    } 
     public void actionPerformed(ActionEvent e) 
     { 
    System.out.println("action occurred for checking"); 
    String firstnumber=t1.getText(); 
    String secondnumber=t2.getText(); 
    int num1=Integer.parseInt(firstnumber); 
    int num2=Integer.parseInt(secondnumber); 
    int sum=num1+num2; 
      String str=Integer.toString(sum); 
      String sum2=t3.setText(str); 
    JOptionPane.showMessageDialog(null, "The sum is " + sum,"Sum of Two Integers", JOptionPane.PLAIN_MESSAGE); 



     } 
} 
class Button2handler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent r) 
     { 
      System.out.println("clearing all"); 

     } 
}   

在這種編輯過的代碼我可以檢索在消息對話框。問題的總和值是我能得到在第三JtextField.It所述特定字符串示出了在這一行錯誤: //錯誤:不相容類型 字符串sum2 = t3.setText(str); 要求:找到字符串 :無效 1錯誤:(

回答

2

沒有得到運行的代碼,你在這裏有一個問題...

t3.setText(total); 

因爲JTextField沒有setText(int)方法,而不是你。需要將值轉換爲String

您可以使用Integer.toString(total),但它可能給你更好的結果,以使用NumberFormat.getNumberInstance().format(total))代替,例如

t3.setText(NumberFormat.getNumberInstance().format(total)); 

更新

「其他」的問題,你有,這已經把我手忙腳亂,是Button1handler擴展GUI

class Button1handler extends GUI implements ActionListener { 

這意味着,事實上,當它訪問字段t1t2它獲得空值,因爲這些字段與屏幕上的字段不同。

如果您ActionListener是在外部文件/類,你需要將類提供上下文,例如...

class Button1handler implements ActionListener { 

    private JTextField f1; 
    private JTextField f2; 
    private JTextField f3; 

    public Button1handler(JTextField f1, JTextField f2, JTextField f3) { 
     this.f1 = f1; 
     this.f2 = f2; 
     this.f3 = f3; 
    } 

    public void actionPerformed(ActionEvent e) { 
     int firstnumber = Integer.parseInt(f1.getText()); 
     int secondnumber = Integer.parseInt(f2.getText()); 
     int total = firstnumber + secondnumber; 
     f3.setText(NumberFormat.getNumberInstance().format(total)); 
    } 
} 

然後,你需要創建操作處理程序的新實例使用類似...

b1.addActionListener(new Button1handler(t1, t2, t3)); 

這提供了對這些被屏幕上的用戶操縱的實際領域的參考操作處理程序...

您可能會對Nested Classes感興趣,它可以爲您提供一些額外的功能來滿足此要求(必須通過引用),但在移動到對象之前應該與對象的上下文非常不同;)

+0

您能解釋一下嗎一段代碼: t3.setText(NumberFormat.getNumberInstance()。format(total)); 雖然它會拋出有關「NumberFormat」的錯誤 – user3522245

+0

「拋出錯誤」或生成編譯器錯誤?如果這是一個編譯器錯誤,你可能沒有導入NumberFormat。你在使用IDE嗎? –

+0

nope只是使用簡單的文本編輯器「notepad ++」 – user3522245