Как сделать выборочный gettext () - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь сделать программу обмена валюты, но если второй ввод (здесь s1) пуст, программа выдаст NumberFormatException:Empty String error.Это работает, когда первый (здесь) пуст.Поэтому мне интересно, есть ли альтернативный способ сделать его избирательным с помощью одной кнопки.И почему не работает, когда второе поле пусто?

public class kanvas1 implements ActionListener,WindowListener{


    private JTextField tf;
    private JTextField tf1;
    private JTextField tf2;
    private JTextField tf3;
    private JLabel lb;
    private JLabel lb1;

    private JButton bt;
    private JButton bt1;

    public kanvas1()
    {

        tf=new JTextField();
        tf1=new JTextField();
        tf2=new JTextField();
        tf3=new JTextField();
        lb=new JLabel("$");
        lb1=new JLabel("TL");
        bt=new JButton("Cevir");
        bt1=new JButton("Sıfırla");


        pencere();


    }

    public void pencere() {
        tf.setBounds(50,20,150,50);
        tf1.setBounds(50,80, 150, 50);
        tf2.setBounds(220,20,150,50);
        tf3.setBounds(220,80,150,50);
        lb.setBounds(30,20,20, 50);
        lb1.setBounds(30,80,20,50);
        bt.setBounds(400,20,100, 50);
        bt1.setBounds(400,80,100,50);
        bt.addActionListener(this);
        bt1.addActionListener(this);
        JFrame ab=new JFrame();
        ab.setVisible(true);
        ab.setSize(600,200);
        ab.setLayout(null);
        ab.add(tf);ab.add(tf1);ab.add(tf2);ab.add(tf3);ab.add(bt);ab.add(bt1);ab.add(lb);ab.add(lb1);
        bt.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {


                String s=tf.getText(); //problem is here


                double a=Double.parseDouble(s);

                double c=a*5.44;

                String result=String.valueOf(c);

                tf2.setText(result);




            }

        });
        bt.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {



                String s1=tf1.getText();
                                          //and here

                double b=Double.parseDouble(s1);

                double d=b*0.18;

                String result1=String.valueOf(d);

                tf3.setText(result1);


            }

        });
        bt1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                tf.setText("");
                tf1.setText("");
                tf2.setText("");
                tf3.setText("");

            }
        });


    }


    @Override
    public void windowActivated(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void windowClosed(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void windowClosing(WindowEvent arg0) {
        System.exit(0);

    }

    @Override
    public void windowDeactivated(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void windowDeiconified(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void windowIconified(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void windowOpened(WindowEvent arg0) {
        // TODO Auto-generated method stub

    }

    public static void main(String args[]) {

        new kanvas1();



    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }   
}

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Вместо того, чтобы писать addActionListener для одной и той же кнопки дважды, вы можете написать ее в единственном числе addActionListener. Кроме того, не оставляйте пустое поле, вы получаете NumberFormatException, так как один из ваших JTextField дает пустое значение или любое другое значение, которое не является двойным. При синтаксическом анализе Double.parseDouble ("12.34") всегда должно содержать значение double в строковом формате. Разбор с остальными значениями бросков NumberFormatException

bt.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {


        String s=tf.getText(); //problem is here


        double a=Double.parseDouble(s);

        double c=a*5.44;

        String result=String.valueOf(c);

        tf2.setText(result);




    }

});
bt.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {



        String s1=tf1.getText();
                                  //and here

        double b=Double.parseDouble(s1);

        double d=b*0.18;

        String result1=String.valueOf(d);

        tf3.setText(result1);


    }

});

Заменить вышеуказанный код на:

bt.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {


        String s=tf.getText();


        double a=Double.parseDouble(s);

        double c=a*5.44;

        String result=String.valueOf(c);

        tf2.setText(result);



         String s1=tf1.getText();
         double b=Double.parseDouble(s1);

        double d=b*0.18;

        String result1=String.valueOf(d);

        tf3.setText(result1);



    }

});
0 голосов
/ 16 марта 2019

вы можете добавить чек перед разбором так:

if (s1.isEmpty())
     return;

Сбой, потому что Double.parseDouble(String arg) пытается преобразовать строку, переданную в качестве аргумента, в тип Double, который представляет строка. это означает, что строки типа "12", "12.0" и т. д. являются допустимыми входными данными, а строки типа "12a", "ac", "" и т. д. . обречены на провал; потому что, в конце концов, 12a не является двойным (это даже не число!).

Если текстовое поле пусто и вы выполняете getText(), то вы получите: "" (пустая строка), а не null.

поэтому, если вы хотите принять какое-либо условное решение, основывайте свое условие на извлеченном тексте: empty i.e. "", а не null

...