Я должен сделать простой калькулятор, но у меня проблемы с этим:

При нажатии на кнопку должно происходить следующее:

  • Получите текст из двух JTextField и преобразуйте их в Doubles. Используйте Double.parseDouble(String input), чтобы превратить String в Double. (Не знаете, куда поместить это?)
  • Получите текст из JComboBox. Используйте метод getSelectedItem(), чтобы получить текущую выбранную строку. (Не уверен, что сделал это правильно)
  • Вычислить результат на основе строки из JComboBox Это определяет, будете ли вы использовать оператор +, - оператор, * оператор или оператор /. (не знаю как это сделать)
  • Установите результат в JLabel Используйте метод .setText() для создания строки

Это мои 4 проблемы.

class MyFrame extends JFrame {

public JTextField firstNumber;
public JTextField secondNumber;
public JButton calc;
public JLabel result;
public JComboBox combo;

public MyFrame() {
    super();
    init();
}

private void init() {
    
    JButton calc = new JButton("Calculate");
    calc.addActionListener(new MyButtonListener(this));
    firstNumber = new JTextField();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add(calc);
    this.add(firstNumber);
    this.add(secondNumber);
    this.pack();
    this.setVisible(true);
}
}

class MyButtonListener implements ActionListener {
MyFrame fr;

public MyButtonListener(MyFrame frame)
{
    fr = frame;
    fr.firstNumber.getText();
    fr.secondNumber.getText();
    fr.combo.getSelectedItem();
}


public void actionPerformed(ActionEvent e) 
{
    JButton btn = (JButton) e.getSource();
    
}
}

private static void constructGUI() {

JFrame.setDefaultLookAndFeelDecorated(true);

JTextField firstNumber = new JTextField();
JTextField secondNumber = new JTextField();
JButton calc = new JButton("Calculate"); 
JLabel result = new JLabel();
JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Simple Calculator");


 String[] arth = { "Add", "Subtract", "Multiple", 
 "Divide" };
 JComboBox combo = new JComboBox(arth);
 combo.setSelectedIndex(0);

frame.setLayout(new GridLayout(5, 2));
frame.add(new JLabel("First Number:"));
frame.add(firstNumber);
frame.add(new JLabel("Second Number:"));
frame.add(secondNumber);
frame.add(combo);
frame.add(calc);
frame.add(new JLabel("Result:"));
frame.pack();
frame.setSize(200, 200);
frame.setVisible(true);
}   


public static void main(String[] args) 
{
SwingUtilities.invokeLater(new Runnable() 
{
    public void run() 
    {
        constructGUI();
    }   
});
}
}
-1
Cheyenne 1 Окт 2022 в 21:06
Вы не используете свой собственный MyFrame :)
 – 
notAPPP
1 Окт 2022 в 21:18

1 ответ

Ваш MyFrame не связан с остальным кодом, вызываемым в main.

  1. Добавлен слушатель в ваше поле результатов (также включенный в JFrame, потому что он не использовался) - код из лямбда может быть извлечен для лучшей видимости

  2. Добавил только "ДОБАВИТЬ" остальное будет аналогично

    частная статическая недействительная конструкция GUI () {

    JFrame.setDefaultLookAndFeelDecorated(true);
    
    JTextField firstNumber = new JTextField();
    JTextField secondNumber = new JTextField();
    JButton calc = new JButton("Calculate");
    JLabel result = new JLabel("Result:");
    JFrame frame = new JFrame();
    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Simple Calculator");
    
    String[] arth = {"Add", "Subtract", "Multiple", "Divide"};
    JComboBox combo = new JComboBox(arth);
    combo.setSelectedIndex(0);
    
    frame.setLayout(new GridLayout(5, 2));
    frame.add(new JLabel("First Number:"));
    frame.add(firstNumber);
    frame.add(new JLabel("Second Number:"));
    frame.add(secondNumber);
    frame.add(combo);
    frame.add(calc);
    frame.add(result);
    frame.pack();
    frame.setSize(200, 200);
    frame.setVisible(true);
    
    calc.addActionListener(
        e -> {
          var first = Double.parseDouble(firstNumber.getText());
          var secound = Double.parseDouble(secondNumber.getText());
          double res = 0;
    
          switch (Objects.requireNonNull(combo.getSelectedItem()).toString()) {
            case "Add":
              res = first + secound;
              break;
          }
          result.setText(String.valueOf(res));
        });
    

    }

Упрощенный основной:

public static void main(String[] args) {
    SwingUtilities.invokeLater(Main2::constructGUI);
  }
0
notAPPP 1 Окт 2022 в 21:37