【问题标题】:How to get text from JTextField? [duplicate]如何从 JTextField 中获取文本? [复制]
【发布时间】:2014-05-12 04:55:33
【问题描述】:

我试图理解扫描仪功能,但我似乎无法理解它。

我正在编写一个计算 BMI(体重指数)的程序,它实际上已经完成,只是我无法进行计算!除了单击“确定”按钮外,一切正常。

不得不拿走我的代码,这样我的同事就不会像过去那样复制我的代码,周五之后会再次发布。

【问题讨论】:

  • 你为什么要为此使用扫描仪?
  • docs.oracle.com/javase/tutorial/uiswing/components/… 应该会有所帮助。 getText() 从 JTextField 中检索文本。
  • '因为如果我不这样做,我在 JTextField 中写的数字将不起作用,至少,它不起作用,我认为这是因为它没有从键盘接收数字...
  • 嗯?有一些适当的方法可以从 JTextFields 获取输入,例如我上面发布的链接中的示例。而 Scanner 类不是其中之一。

标签: java swing jframe jtextfield


【解决方案1】:

首先,Scanner 的东西没有问题,当我们使用 GUI 时也不需要它。

它仅对控制台输入/输出有用。

所以当你得到文本时,它将是字符串格式,所以将其解析为双倍

String val = txt1.getText();
double valueDouble = Double.parseDouble(val);

并使用 try/catch 处理解析异常

所以替换下面这段代码

 Scanner dado1 = new Scanner(txt1.getText());
            System.out.println(dado1);
                if(dado1.hasNextDouble()){
                    tamanho = dado1.nextDouble();
                }
            Scanner dado2 = new Scanner(txt2.getText());
                if(dado2.hasNextDouble()){
                    peso = dado2.nextDouble();
                }

String t1 = txt1.getText();
if(!"".equals(t1))
tamanho = Double.parseDouble(t1);


String t2 = txt2.getText();
if(!"".equals(t2))
peso = Double.parseDouble(t2);

我试图运行你的程序,但我得到了异常提示 -> 容器没有父属性。

所以我所做的是我在你的确定按钮动作监听器中添加了一个父容器

而且效果很好。

要添加的容器是

final JDesktopPane desk = new JDesktopPane();
                    setContentPane(desk);

给你的

JOptionPane.showInternalMessageDialog(desk,"Seu IMC é:"+ (result/ peso));

但您已将 null 作为第一个参数传递。

所以它应该像下面这样

   ok.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent evt){
            String t1 = txt1.getText();
            if(!"".equals(t1))
            tamanho = Double.parseDouble(t1);


            String t2 = txt2.getText();
            if(!"".equals(t2))
            peso = Double.parseDouble(t2);
              result = tamanho*tamanho;
            if (ok != null){
                System.out.println(result);
                System.out.println(peso);
                final JDesktopPane desk = new JDesktopPane();
                setContentPane(desk);
                JOptionPane.showInternalMessageDialog(desk,"Seu IMC é:"+ (result/ peso));
            }
        }
    });

【讨论】:

  • 其实它在这里帮了很多忙!它至少到了执行的最后,但它仍然没有显示我在这里输入的数字的结果......它在那里显示了吗?
  • 是的,不要像我在帖子开头所展示的那样使用扫描仪,我已将其更新为从文本字段读取并解析它..
  • 我已经更新了从文本字段中读取值的正确方法..检查它并告诉我'
  • 哎呀我的错误哈​​哈,我忘了删除导入扫描仪,它现在正在运行,但结果总是 NaN,认为这甚至不是一个数字......知道为什么吗?
  • 是的,我明白了..在输入文本值之前,您正在计算和读取文本值,因此它的值为 0.0/0.0...所以将读取和计算代码移动到 ok 侦听器操作中执行的方法...查看更新的相同答案
【解决方案2】:

您可以简单地parse 而不是扫描仪:

tamanho = Double.parseDouble(txt1.getText());

【讨论】:

  • 分享您的更新代码
  • 显示并开始工作了哈哈谢谢!您也帮了很多忙,谢谢您的支持!
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2014-06-18
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多