JAVA UI ActionListener 2 последовательных нажатия кнопок с инструкциями if else

Из эта ссылка :

Если извлечение завершилось неудачно (например, если была введена буква, где цифра ожидается), значение остается неизмененным и устанавливается битбит ( до C ++ 11)

Если извлечение завершилось неудачно, нуль записывается в значение и устанавливается failbit. Если извлечения приводит к слишком большому или слишком маленькому значению, чтобы соответствовать значению, записывается std :: numeric_limits :: max () или std :: numeric_limits :: min () и устанавливается флаг failbit. (поскольку C ++ 11)

blockquote>

Кажется, что ваш компилятор компилируется в режиме C ++ 11, что изменяет поведение.


Оператор ввода использует фасет локали std::num_get , функция get вызывает do_get . Для C ++ 11 указано использование std::strtoll et. и др. тип функций. До C ++ 11 он, по-видимому, использовал std::scanf разбор стиля (по ссылке, у меня нет доступа к спецификации C ++ 03) для извлечения чисел. Изменение поведения связано с этим изменением в анализе ввода.

0
задан Jensen Kansas 26 February 2019 в 14:24
поделиться

3 ответа

Когда event.getSource() == bin истинно, ни один из вложенных операторов if не может быть истинным: if(event.getSource() == n1){

Также этот if всегда будет истинным, поскольку оператор присваивания pass = 1; if(pass == 1){

0
ответ дан Kebab Programmer 26 February 2019 в 14:24
поделиться

Попробуйте перекрасить или повторно проверить после обновления:

textField.repaint();

Или, возможно:

textField.revalidate();

Проверить: https://docs.oracle.com/javase/tutorial /uiswing/painting/problems.html

0
ответ дан saidaspen 26 February 2019 в 14:24
поделиться

Итак, вам нужна отдельная переменная для хранения текущего типа представления (двоичное / восьмеричное / десятичное / шестнадцатеричное)

В вашем коде оно должно выглядеть следующим образом:

private static final int BINARY = 2; // probably use enum
private static final int OCTAL = 8; // probably use enum
private static final int DECIMAL = 10; // probably use enum
private JTextField textField;
private JButton n1, n2, n3, n4, n5, n6, n7, n8, n9, n0, add, subtract, multiply, divide, clear, backspace, bin, dec, oct, hex;
private JPanel panel, panel1, p;
private int system = DECIMAL;

// initialization code

public void actionPerformed(ActionEvent event)
{
    if(event.getSource() == bin){
        system = BINARY;
    } else if (event.getSource() == dec) {
        system = DECIMAL;
    } // same for other systems.

    if (system == BINARY) {
        if(event.getSource() == n1){
            textField.setText(textField.getText() + "1");
        }
        else if(event.getSource() == n0){
            textField.setText(textField.getText() + "0");
        }
        else if(event.getSource() == add){
            textField.setText(textField.getText() + " + ");
        }
        else if(event.getSource() == subtract){
            textField.setText(textField.getText() + " - ");
        }
        else if(event.getSource() == multiply){
            textField.setText(textField.getText() + " * ");
        }
        else if(event.getSource() == divide){
            textField.setText(textField.getText() + " / ");
        }
        else if(event.getSource() == clear){
            textField.setText("");
        }
    } else if (system == DECIMAL) {
        if(event.getSource() == n1){
            textField.setText(textField.getText() + "1");
        }
        else if(event.getSource() == n2){
            textField.setText(textField.getText() + "2");
        }
        else if(event.getSource() == n3){
            textField.setText(textField.getText() + "3");
        }
        else if(event.getSource() == n4){
            textField.setText(textField.getText() + "4");
        }
        else if(event.getSource() == n5){
            textField.setText(textField.getText() + "5");
        }
        else if(event.getSource() == n6){
            textField.setText(textField.getText() + "6");
        }
        else if(event.getSource() == n7){
            textField.setText(textField.getText() + "7");
        }
        else if(event.getSource() == n8){
            textField.setText(textField.getText() + "8");
        }
        else if(event.getSource() == n9){
            textField.setText(textField.getText() + "9");
        }
        else if(event.getSource() == n0){
            textField.setText(textField.getText() + "0");
        }
        else if(event.getSource() == add){
            textField.setText(textField.getText() + " + ");
        }
        else if(event.getSource() == subtract){
            textField.setText(textField.getText() + " - ");
        }
        else if(event.getSource() == multiply){
            textField.setText(textField.getText() + " * ");
        }
        else if(event.getSource() == divide){
            textField.setText(textField.getText() + " / ");
        }
        else if(event.getSource() == clear){
            textField.setText("");
        }
    } // same for other systems
}

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

0
ответ дан Sergiy Medvynskyy 26 February 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: