【问题标题】:Using JTextField for user input使用 JTextField 进行用户输入
【发布时间】:2013-04-23 13:14:30
【问题描述】:

感谢你们的帮助......现在程序可以正常运行......但我还有 2 个问题。 1.如何将输出放入 JTestField t4 或 t5 2.如何使用JButton Button3关闭应用程序

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);

  }

}

【问题讨论】:

    标签: java swing jframe jbutton jtextfield


    【解决方案1】:

    添加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

    【讨论】:

    • 感谢您的快速重播,但一旦我测试它填充的程序无法打开,它几乎会立即自行关闭。代码有什么问题吗?
    • 那是因为你试图在JTextField 中解析一个空的String。查看堆栈跟踪。它显示了应用程序失败的地方。查看更新
    【解决方案2】:

    正如 Reimeus 指出的那样,除了缺少 main 方法之外,您的指令顺序也是错误的。您试图在屏幕上显示任何内容之前,甚至在创建对象之前读取用户输入。例如这一行:

    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);
         }
      

      });

    【讨论】:

    • 非常感谢您的帮助。我按照你的指示,程序运行完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2019-06-01
    • 2013-11-22
    • 1970-01-01
    • 2014-07-14
    • 2017-04-20
    相关资源
    最近更新 更多