簡體   English   中英

JButton ActionListener沒有響應

[英]JButton ActionListener not responding

我在網上其他任何地方都找不到答案,所以我來到了這里。 如果我的代碼中的錯誤非常明顯,我會提前道歉; 我對java swing還是很陌生。 這是怎么回事:我創建了一個名為toggleElevators的JButton,我希望它在單擊時可以更改文本。 我已經創建了一個ActionListener並將其添加到toggleElevators 我現在想要的只是讓JButton在單擊Click meClicked時更改文本。

首先,這是執行JFrame時的外觀圖:

的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(); 操作偵聽器將添加到itoggleElevators ,而不是您從Input類繼承的toggleElevators

嘗試addButtonListeners()

您的Run類擴展了Input 因此,它有自己的toggleElevators ,它是在框架中設置的那個。 但是, i有自己的toggleElevators ,用於設置事件偵聽器。 因此,它們不是設置在框架中的一個上,而是設置在永不使用的框架上。

您可以簡單地刪除i對象。 Run擴展Input ,它可以直接調用該方法,然后將偵聽器添加到其自己的toggleElevators

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM