[英]JButton ActionListener not responding
我在網上其他任何地方都找不到答案,所以我來到了這里。 如果我的代碼中的錯誤非常明顯,我會提前道歉; 我對java swing還是很陌生。 這是怎么回事:我創建了一個名為toggleElevators
的JButton,我希望它在單擊時可以更改文本。 我已經創建了一個ActionListener並將其添加到toggleElevators
。 我現在想要的只是讓JButton在單擊Click me
到Clicked
時更改文本。
首先,這是執行JFrame時的外觀圖:
注意:有一個第三類,但這純粹是為了在左側繪制圖片。 它與GridLayout或JButton無關。
Run
類(創建框架並添加toggleElevators
:
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
}
}
}
您的Run類擴展Input,但還具有一個名為i
的Input。 您將this.toggleElevators
添加到框架中,但您將監聽器添加到i.toggleElevators
。
從您的班級中刪除i
字段。 我也會完全忘記定義和擴展Input類。 它沒有任何作用,似乎比幫助您更令人困惑。
您可以在Run
類中創建一個新的Input
,而Run
類還可以擴展Input
。
調用i.addButtonListeners();
操作偵聽器將添加到i
的toggleElevators
,而不是您從Input
類繼承的toggleElevators
。
嘗試addButtonListeners()
。
您的Run
類擴展了Input
。 因此,它有自己的toggleElevators
,它是在框架中設置的那個。 但是, i
有自己的toggleElevators
,用於設置事件偵聽器。 因此,它們不是設置在框架中的一個上,而是設置在永不使用的框架上。
您可以簡單地刪除i
對象。 當Run
擴展Input
,它可以直接調用該方法,然后將偵聽器添加到其自己的toggleElevators
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.