если / не указано условие в действующей функции actionPerformed - PullRequest
0 голосов
/ 25 октября 2019

У меня есть этот класс Java, где оператор if / else в actionPerformed не работает. если я удаляю оператор if и просто помещаю некоторые операторы (то есть показываем диалог), они запускаются / выполняются успешно.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CarsAndVans extends JFrame implements ActionListener {


final JButton carBtn = new JButton("Car");
final JButton vanBtn = new JButton("Van");
final JButton reset = new JButton("Reset");
JTextField carTex = new JTextField(10);
JTextField vanTex = new JTextField(10);
int cars = 0, vans = 0;

CarsAndVans() {
    setLayout(new FlowLayout());
    setSize(400, 300);
    setTitle("Cars and Vans Applet");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);

    JButton carBtn = new JButton("Car");
    JButton vanBtn = new JButton("Van");
    JButton reset = new JButton("Reset");
    JTextField carTex = new JTextField(10);
    carTex.setEditable(false);
    JTextField vanTex = new JTextField(10);
    vanTex.setEditable(false);
    int cars = 0, vans = 0;

    carTex.setEditable(false);
    vanTex.setEditable(false);

    add(new Label("Cars"));
    add(carTex);
    add(new Label("Van:"));
    add(vanTex);
    add( carBtn);
    add( vanBtn);
    add( reset);

    carBtn.addActionListener(this);
    vanBtn.addActionListener(this);
    reset.addActionListener(this);


}
@Override
public void actionPerformed(ActionEvent actionEvent) {

    if (actionEvent.getSource() == carBtn){
        cars++;
    } else if (actionEvent.getSource() == vanBtn) {
        vans++;
    } else if ((actionEvent.getSource() == reset)) {
        vans = 0;
        cars = 0;
    }
    carTex.setText(""+cars);
    vanTex.setText(""+vans);
}
}

не уверен, в чем проблема!

Я посмотрел на некоторыевопрос здесь, но ни один не похож.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Проблема в том, что вы переопределяете типы кнопок внутри вашего конструктора. Таким образом, вы скрываете их и используете неправильные в вашем ActionListener.

final JButton carBtn = new JButton("Car");
final JButton vanBtn = new JButton("Van");
final JButton reset = new JButton("Reset");

против

    JButton carBtn = new JButton("Car");
    JButton vanBtn = new JButton("Van");
    JButton reset = new JButton("Reset");
1 голос
/ 25 октября 2019

Вы скрываете свои переменные ...

final JButton carBtn = new JButton("Car");
final JButton vanBtn = new JButton("Van");
final JButton reset = new JButton("Reset");

CarsAndVans() {
    //...
    JButton carBtn = new JButton("Car");
    JButton vanBtn = new JButton("Van");
    JButton reset = new JButton("Reset");

Посмотрите, как вы объявили их дважды. Это означает, что источник действия, переданный в ваш actionPerformed метод, не является тем же экземпляром, что и ваш класс, поэтому == не будет работать.

Удалите повторные замедления в конструкторе

...