Как сделать этот код JFrame более простым? - PullRequest
0 голосов
/ 03 июня 2018

Я только начал изучать JFrame и попытался сделать простой калькулятор.Это работает, но это также повторяется, для каждой кнопки нужно создать ActionListener.Есть ли способ сделать это проще?

public class gui extends JFrame
{
    private JButton one;
    private JButton two;
    private JButton three;
    private JButton four;
    private JButton five;
    private JButton six;
    private JButton seven;
    private JButton eight;
    private JButton nine;
    public double first  = 0;
    public double second = 0;
    public double sum    = 0;

    public gui() 
    {   
        super("title");
        setLayout(new FlowLayout());

        one   = new JButton("1"); //makes a new button to click.
        two   = new JButton("2");
        three = new JButton("3");
        four  = new JButton("4");
        five  = new JButton("5");
        six   = new JButton("6");
        seven = new JButton("7");
        eight = new JButton("8");
        nine  = new JButton("9");
        one.addActionListener( //MAKES NEW INNER CLASS TO DEFINE WHAT ONE DOES
            new ActionListener() 
            {
                public void actionPerformed(ActionEvent event) 
                { 
                    // checks if clicked. 
                    if (first == 0) first = 1;
                    else second = 1;

                    if (first != 0 && second != 0) 
                    {
                        sum = first + second;
                        System.out.println(sum);
                        first = 0;
                        second = 0;
                    }
                }
            });
        two.addActionListener( 

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 2;
                        }else {
                            second = 2;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        three.addActionListener( 

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 3;
                        }else {
                            second = 3;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        four.addActionListener(

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) {
                        if(first == 0) {
                        first = 4;
                        }else {
                            second = 4;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        five.addActionListener(

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 5;
                        }else {
                            second = 5;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        six.addActionListener( 

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 6;
                        }else {
                            second = 6;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        seven.addActionListener(

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 7;
                        }else {
                            second = 7;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        eight.addActionListener(

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 8;
                        }else {
                            second = 8;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;
                        }
                    }
                }
            );
        nine.addActionListener( 

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { 
                        if(first == 0) {
                        first = 9;
                        }else {
                            second = 9;
                        }
                        if(first != 0 && second != 0) {
                            sum = first + second;
                            System.out.println(sum);
                            first = 0;
                            second = 0;

                        }
                    }
                }
            );

        add(one);
        add(two);
        add(three);
        add(four);
        add(five);
        add(six);
        add(seven);
        add(eight);
        add(nine);

    }

}

Также я не могу найти способ "объединить" два числа, которые у меня есть.Если пользователь нажимает 9 и 2, я хочу объединить эти два числа в 92. Как бы я это сделал?

1 Ответ

0 голосов
/ 04 июня 2018

Одна вещь, которую вы можете сделать, чтобы убрать много повторений, - это использовать один ActionListener для всех ваших кнопок.Вы можете установить атрибут actionCommand для каждой кнопки, которую слушатель действия будет использовать для определения, какая кнопка была нажата.

Вот общая иллюстрация:

private ActionListener btnListener = new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        switch (event.getActionCommand()) {
            case "0": 
            case "1": 
               // ...
            case "9":
                enterDigit(event.getActionCommand());
                break;                    
        }
    }
};

public gui(){
    one = new JButton("1");
    one.setActionCommand("1");
    one.addActionListener(btnListener);
    two = new JButton("2");
    two.setActionCommand("2");
    two.addActionListener(btnListener);
    // ...
}

Что касается комбинирования отдельныхцифровые кнопки нажимают для формирования больших чисел, это может быть несколько способов, в зависимости от того, как вы хотите сохранить свои номера.
Возможно, проще всего начать с использования String s, в этом случае вы просто добавляете Stringсодержащий входную цифру (которая поступила из actionCommand JButton) в существующие String ранее введенных цифр:

private String numberInDisplay = "";

// remember enterDigit from the ActionListener above?  This is it...
private void enterDigit(String digit){
    numberInDisplay = numberInDisplay + digit;
}

Если вы хотите использовать числовой тип, такой как long, вы просто умножаете существующее число на десять и добавляете значение новой цифры:

private long numberInDisplay = 0;
private void enterDigit(String digit){ 
    numberInDisplay = numberInDisplay * 10 + Long.valueOf(digit); 

Конечно, это довольно упрощенный пример.Если вы захотите обработать десятичные точки, отрицательные знаки, научную запись и т. Д., Возникнут некоторые дополнительные сложности, но это, по крайней мере, должно привести вас к правильному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...