我可以在JPanels上使用actionListener吗?

时间:2019-03-16 20:15:30

标签: java swing user-interface jpanel actionlistener

我试图将actionListener添加到JPanel中,但它却不断出现错误“找不到符号”。我只是想知道是否有可能这样做,因为我希望能够在面板上单击并进行颜色更改。任何帮助将不胜感激。

这是我到目前为止所拥有的。

distinct

我试图找到是否需要其他方法来执行此操作,但找不到任何东西。我是否可能需要添加一个按钮来填充每个面板才能完成这项工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

它默认为no addActionListener,下面的代码是参考建议。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

class GPanel extends JPanel {
    private List<ActionListener> listenerList = new ArrayList<>();

    public GPanel() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                var event = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "GPanel");
                for (var i : listenerList) {
                    i.actionPerformed(event);
                }
            }
        });
    }

    public void addActionListener(ActionListener listener) {
        listenerList.add(listener);
    }
}

public class ActionListenerTest extends JFrame {
    public static void main(String[] args) {
        new ActionListenerTest();
    }

    public ActionListenerTest() {
        GPanel test = new GPanel();
        test.setBackground(Color.BLUE);
        add(test);
        test.addActionListener(e-> {
            System.out.println("Click: " + e.getActionCommand());
        });
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
}