2013-04-29 32 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

相关问题