java - 将 Action 监听器添加到在 java 循环中创建并从另一个类调用的新 jbutton

标签 java swing model-view-controller jbutton actionlistener

我试图将 ActionListener 添加到循环中创建的 JButton 中,然后从另一个类( Controller 类)调用 ActionListener ),但它不起作用。我不知道为什么。

这是第一个类

public class Browse extends JPanel {

    private JButton play_lists_btn;

    public Browse() {

        int increment = 0;
        while (increment < 5) {
            add(createButton(increment));
            increment++;
        }
    }

    private JButton createButton(final int i) {

        play_lists_btn = new JButton();
        play_lists_btn.setText(" This is " + i);
        return play_lists_btn;
    }

    public void addPlayListener(ActionListener play) {
        play_lists_btn.addActionListener(play);
    }

    public static void main(String args[]) {
        Browse b = new Browse();
        BrowseController bc = new BrowseController(b);
        JFrame frame = new JFrame();
        frame.add(b);
        frame.setSize(1100, 830);
        frame.setLocationRelativeTo(null);
        frame.setResizable(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

这里是调用按钮 ActionListener 的 Controller 类,并为按钮创建 ActionEvent

public class BrowseController {

    private Browse b;

    public BrowseController(Browse b) {
        this.b = b;
        b.addPlayListener(new PlayListener());
    }

    private class PlayListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String text = (String) e.getActionCommand();
            System.out.println(text);
        }
    }   
}

似乎没有什么效果。打印语句永远不会出现。请帮忙,因为我正在尝试实现 MVC 设计模式。

最佳答案

试试这个,

将内部类移至 Browse.java 中,并为创建的每个按钮添加 ActionListener

import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Browse extends JPanel {

    private JButton [] play_lists_btn=new JButton[5];//define an array of JButtons

public Browse() {

    int increment = 0;
    while (increment < 5) {
        add(createButton(increment));
        increment++;
    }
}

private JButton createButton(final int i) {

    play_lists_btn[i] = new JButton();
    play_lists_btn[i].setText(" This is " + i);
    return play_lists_btn[i];
}

public void addPlayListener(ActionListener play) {
    for(JButton b : play_lists_btn)
    b.addActionListener(play);
}



public static void main(String args[]) {
    client.Browse b = new client.Browse();
    BrowseController bc = new BrowseController(b);
    JFrame frame = new JFrame();
    frame.add(b);
    frame.setSize(1100, 830);
    frame.setLocationRelativeTo(null);
    frame.setResizable(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
}

BrowseController.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class BrowseController {

private Browse b;

public BrowseController(Browse b) {
    this.b = b;
    b.addPlayListener(new PlayListener());
}

    private class PlayListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String text = (String) e.getActionCommand();
            System.out.println(text);
        }
    }

}

关于java - 将 Action 监听器添加到在 java 循环中创建并从另一个类调用的新 jbutton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22971114/

相关文章:

Java 怪异越界?

java GUI JLabel

java - 改造回调用于根据参数执行其他操作

java - java中从GUI文本字段获取文本错误

c# - ASP.NET CORE 中的 CORS 策略阻止了对 XMLHttpRequest 的访问

java - 实例 boolean 变量的 NullPointerException

java - 从 jComboBox(Java 数据库)中选择时用记录填充 jTextField

java - JPanel 在尝试绘制时卡住了我的整个应用程序

javascript - 如何从传递给 View 的模型访问 javascript 文件中的 json 对象

javascript - 使用 jQuery MVC 将 SQL 表数据转换为 HTML 表