JAVA UI ActionListener 2 последовательных нажатия кнопок с инструкциями if else - PullRequest
0 голосов
/ 26 февраля 2019

Может кто-нибудь сказать мне, что не так с моим кодом?

Я пытаюсь создать пользовательский интерфейс с bin, dec и т. Д., И каждый раз, когда он нажимает только соответствующие числа, соответствующие системе счисленияможет быть выбран пользователем или отображен в textField, например, если пользователь щелкает bin, только 0 и 1 может отображаться в textField.

Я пытался использовать вложенные операторы if else, но это не похожеработать.Пожалуйста, помогите, спасибо.

Вот мой код ниже:

    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.SwingConstants;  
    import javax.swing.*;
    import java.awt.*;
    import java.awt.FlowLayout;


public class Trial extends JFrame implements ActionListener
{

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;


public Trial(String str)
{

    super(str);
    setSize(300, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);


    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(5, 4));

    panel.add(n1 = new JButton("1"));
    panel.add(n2 = new JButton("2"));
    panel.add(n3 = new JButton("3"));
    panel.add(backspace = new JButton("C"));
    panel.add(n4 = new JButton("4"));
    panel.add(n5 = new JButton("5"));
    panel.add(n6 = new JButton("6"));
    panel.add(bin = new JButton("BIN"));
    panel.add(n7 = new JButton("7"));
    panel.add(n8 = new JButton("8"));
    panel.add(n9 = new JButton("9"));
    panel.add(dec = new JButton("DEC"));
    panel.add(add = new JButton("+"));
    panel.add(n0 = new JButton("0"));
    panel.add(subtract = new JButton("-"));
    panel.add(oct = new JButton("OCT"));
    panel.add(multiply = new JButton("*"));
    panel.add(clear = new JButton("AC"));
    panel.add(divide = new JButton("/"));
    panel.add(hex = new JButton("HEX"));



    JPanel panel1 = new JPanel();
    panel1.setLayout(new FlowLayout());
    panel1.add(textField = new JTextField(20));


    panel.setBounds(20,20,300,150);
    panel1.setBounds(0,0,300,20);
    add(panel, BorderLayout.SOUTH);
    add(panel1, BorderLayout.NORTH);


    n1.addActionListener(this);
    n2.addActionListener(this);
    n3.addActionListener(this);
    n4.addActionListener(this);
    n5.addActionListener(this);
    n6.addActionListener(this);
    n7.addActionListener(this);
    n8.addActionListener(this);
    n9.addActionListener(this);
    n0.addActionListener(this);
    add.addActionListener(this);
    subtract.addActionListener(this);
    multiply.addActionListener(this);
    divide.addActionListener(this);
    clear.addActionListener(this);
    backspace.addActionListener(this);
    bin.addActionListener(this);
    dec.addActionListener(this);
    oct.addActionListener(this);
    hex.addActionListener(this);


    setVisible(true);

}

public void actionPerformed(ActionEvent event)
{
    if(event.getSource() == bin){
        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{
            textField.setText("");
        }
    }

    else if(event.getSource() == dec){
        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("");
        }
    }

}




public static void main(String [] args)
{
    new Trial("Le Frame");
}

}

Проблема приведенного выше кода заключается в том, что он вообще не отображает никаких символов вtextfield.

Ниже приведен фрагмент программы:! [1]: (https://i.stack.imgur.com/R2Len.png)

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

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

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

0 голосов
/ 26 февраля 2019

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

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

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 голосов
/ 26 февраля 2019

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

textField.repaint();

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

textField.revalidate();

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

...