Я не мог найти ответ нигде в Интернете, поэтому я приехал сюда. Я заранее извиняюсь, если ошибка в моем коде очень очевидна; Я по-прежнему новичок в java swing. Вот что происходит: я создал JButton с именем toggleElevators
, и я хочу, чтобы он менял текст при нажатии. Я уже создал ActionListener и добавил его в toggleElevators
. Все, что я хочу прямо сейчас, это то, что JButton меняет текст при нажатии с Click me
на Clicked
.JButton ActionListener не отвечает
Во-первых, вот картина того, что фрейму выглядит при выполнении:
Примечание: Существует третий класс, но это чисто для рисования картины на левой стороне. Это не имеет никакого отношения к GridLayout или JButton.
Run
класс (созданный кадр и добавляет toggleElevators
JButton:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
public class Run extends Input{
Input i = new Input();
public static void main(String[] args) {
new Run();
}
public Run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Elevators");
frame.setLayout(new GridLayout(0, 3));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Elevators(Color.MAGENTA, true));
frame.add(new Elevators(Color.ORANGE, false));
frame.setSize(800,600);
frame.setResizable(false);
frame.getContentPane().add(toggleElevators); //adds toggleElevators button to JFrame
i.addButtonListeners(); //calls method defined in Input class, which adds the ActionListener to the toggleElevators button
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Input
класс (создает toggleElevators
JButton и его ActionListener):
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class Input {
JButton toggleElevators = new JButton("Click me.");
public void addButtonListeners() {
toggleElevators.addActionListener(new toggleElevatorsListener());
}
class toggleElevatorsListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
toggleElevators.setText("Clicked.");
System.out.println("ActionListener called."); //I know the ActionListener is not being called because this line is not being printed out in the console
}
}
}
Почему вы усложняете ситуацию? Почему вы не добавляете 'ActionListener' в' JButton' напрямую? – nom
@NabeelOmer Это то, что вызывает проблему? Создал внутренний класс для ActionListener? Я не думал, что это что-то сделает. – Nick
Я сейчас не рядом с компьютером (черт возьми, сейчас здесь 4 часа ночи), но вы усложняете вещи, создавая отдельный класс для 'ActionListener', добавляя его прямо к' JButton'. И – nom