2013-04-29 59 views
-1

感謝您的幫助......現在程序能夠正常工作並運行,但是我還有2個問題。 我1.How可以得到輸出到JTestField T4或T5 我2.How可以關閉使用的JButton Buton3應用使用JTextField進行用戶輸入

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
public class TriangleFarfan{ 
JFrame Triangle = new JFrame("Triangle Calculator"); 
    JButton Button1 = new JButton ("Area"); 
    JButton Button2 = new JButton("Perimeter"); 
    JButton Button3 = new JButton("Close"); 
    JTextField t1 = new JTextField(20); 
    String t1TextBox = t1.getText(); 
    double side1 = Double.parseDouble(t1TextBox); 
    JPanel j1 = new JPanel (new FlowLayout()); 
    JLabel l1 = new JLabel("Enter side 1:"); 
    JTextField t2 = new JTextField(); 
    String t2TextBox = t2.getText(); 
    double side2 = Double.parseDouble(t2TextBox); 
    JPanel j2 = new JPanel (new FlowLayout()); 
    JLabel l2 = new JLabel("Enter side 2:"); 
    JTextField t3 = new JTextField(); 
    String t3TextBox = t3.getText(); 
    double side3 = Double.parseDouble(t3TextBox); 
    JPanel j3 = new JPanel (new FlowLayout()); 
    JLabel l3 = new JLabel("Enter side 3:"); 
    JTextField t4 = new JTextField(); 
    JPanel j4 = new JPanel (new FlowLayout()); 
    JLabel l4 = new JLabel("Area Result"); 
    JTextField t5 = new JTextField(20); 
    JPanel j5 = new JPanel (new FlowLayout()); 
    JLabel l5 = new JLabel("Perimeter Result"); 
public TriangleFarfan() 
    { 
    j1.add(l1); 
    j1.add(t1); 
    j2.add(l2); 
    j2.add(t2); 
    j3.add(l3); 
    j3.add(t3); 
    j4.add(l4); 
    j4.add(t4); 
    j5.add(l5); 
    j5.add(t5); 
    Triangle.add(j1); 
    Triangle.add(j2); 
    Triangle.add(j3); 
    Triangle.add(j4); 
    Triangle.add(j5); 
    Triangle.add(Button1); 
    Button1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
       double Area = (side1 * side2)/2; 
       //Execute when button is pressed 
       System.out.println(Area); 
      } 
     });  
    Triangle.add(Button2); 
    Button2.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
       //Execute when button is pressed 
       System.out.println("You clicked the Perimeter Button"); 
      } 
     });  
    Triangle.add(Button3); 
    Button3.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
       //Execute when button is pressed 
       System.out.println("You clicked the Close Button"); 
      } 
     });  
    Triangle.setLayout(new FlowLayout()); 
    Triangle.setSize(450,400); 
    Triangle.setVisible(true); 
    Triangle.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

}

回答

3

除了缺少主要方法,正如Reimeus指出的那樣,您的指令順序是錯誤的。您甚至在屏幕上甚至在創建對象之前顯示任何內容之前都試圖讀取用戶輸入。例如,該行:

String t1TextBox = t1.getText();

嘗試獲取來自甚至沒有被添加到尚未創建面板一個TextBox文本。

要解決這個問題,您需要重新考慮程序的邏輯。下面是一些提示:

  • 避免分配之外的方法。而不是寫

    JFrame Triangle = new JFrame("Triangle Calculator"); 
    

    的聲明在類體內的變量是這樣的:

    JFrame Triangle; 
    

    並給它的構造像這裏面:

    Triangle = new JFrame("Triangle Calculator"); 
    
  • 構建整個UI,然後擔心聽衆。通過這種方式,您可以確定您沒有引用在獲取用戶輸入時不存在的UI元素。

  • 獲取用戶輸入的聽衆的內部,這樣的:

    Button1.addActionListener(new ActionListener() { 
    
        public void actionPerformed(ActionEvent e) 
        { 
         // get the size of side1 from the textbox 
         String t1TextBox = t1.getText(); 
         double side1 = Double.parseDouble(t1TextBox); 
    
         // get the size of side2 from the textbox 
         String t2TextBox = t2.getText(); 
         double side2 = Double.parseDouble(t2TextBox); 
    
         // now we can calculate the area 
         double Area = (side1 * side2)/2; 
    
         //Execute when button is pressed 
         System.out.println(Area); 
        } 
    

    });

+1

非常感謝您的幫助。我遵循你的指示,程序完美運行。 – 2013-04-29 20:31:31

2

添加main方法:

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     new TriangleFarfan(); 
     } 
    }); 
} 

聲明

JTextField t1 = new JTextField(20); 

不會將JTextField中的值設置爲20。相反,它將設置JTextComponent的列數,但是使用空的String。因此,該行

double side1 = Double.parseDouble(t1TextBox); 

將在啓動時拋出NumberFormatException

+0

感謝您的快速重播,但一旦我測試程序往裏面無法打開,將關閉本身幾乎瞬間。代碼有什麼問題嗎? – 2013-04-29 19:03:48

+1

這是因爲你試圖在'JTextField'中解析一個空的'String'。看看堆棧跟蹤。它顯示應用程序失敗的位置。查看更新 – Reimeus 2013-04-29 19:08:34

相關問題