This question already has answers here:
Retrieving JTextField Contents Like Scanner
                                
                                    (2个答案)
                                
                        
                5年前关闭。
            
        

我正在尝试了解扫描仪功能,但似乎无法理解。

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

必须带走我的代码,这样我的同事才不会像过去那样复制我的代码,将在星期五后再次发布。

最佳答案

首先,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));
            }
        }
    });

08-05 12:02