Java 从JFrame父窗口中的JPanel组件捕获操作事件

Java 从JFrame父窗口中的JPanel组件捕获操作事件,java,swing,jpanel,custom-component,actionevent,Java,Swing,Jpanel,Custom Component,Actionevent,如何从JavaSwing中的JFrame父窗口中的JPanel组件捕获操作事件 我很难在Swing中创建自定义组件 我的想法是在Swing中制作一个自定义JPanel,其中包含一些JButton,并在JFrame父窗口中捕捉这些按钮上的动作事件 我想将方法addActionListener()实现到我的自定义JPanel,就像它是一个按钮一样 我是否必须从JComponent扩展而不是JPanel 我真的很感谢你的帮助和你的时间 package pizzeria.interfaz; impor

如何从JavaSwing中的
JFrame
父窗口中的
JPanel
组件捕获操作事件

我很难在Swing中创建自定义组件

我的想法是在Swing中制作一个自定义JPanel,其中包含一些
JButton
,并在JFrame父窗口中捕捉这些按钮上的动作事件

我想将方法
addActionListener()
实现到我的自定义JPanel,就像它是一个按钮一样

我是否必须从
JComponent
扩展而不是
JPanel

我真的很感谢你的帮助和你的时间

package pizzeria.interfaz;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

public class AplicacionCliente extends JFrame{

    public AplicacionCliente() {

        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());

        PanelMenu panelmenu = new PanelMenu(); //PanelMenu extends JPanel and has my buttons


        JButton bot = new JButton("Prueba");        
        bot.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("Botonazo!");

            }}); 


        contentPane.add(bot);
        contentPane.add(panelmenu, BorderLayout.LINE_END);

    }
}

为什么要实现
addActionListener
而不是
addMouseListener

你想让实现者
addActionListener
en vez de
addMouseListener

编辑:检查此代码,可以工作

public class AplicacionCliente extends JFrame implements MouseListener{

public AplicacionCliente() {

    Container contentPane = getContentPane();
    contentPane.setLayout(new BorderLayout());
    this.setVisible(true);

    PanelMenu panelmenu = new PanelMenu(); //PanelMenu extends JPanel and has my buttons


    JButton bot = new JButton("Prueba");
    bot.addMouseListener(this);
    bot.setName("bot");

    contentPane.add(bot);
    contentPane.add(panelmenu, BorderLayout.LINE_END);

}

@Override
public void mouseClicked(MouseEvent e) {
}

@Override
public void mousePressed(MouseEvent e) {
    if(((JButton)e.getSource()).getName().compareToIgnoreCase("bot")==0){
        System.out.println("Botonazo!!");
    }
}

@Override
public void mouseReleased(MouseEvent e) {
}

@Override
public void mouseEntered(MouseEvent e) {
}

@Override
public void mouseExited(MouseEvent e) {
}

嗨,scgr,让我试试。因此,我可以获取按下的按钮名称或标签,并为按钮的行为添加一些代码,对吗?是的,您可以使用
bot.setName(“name”)
设置按钮的名称,然后使用eventYes中的
getName()
检查按钮是否按下了您想要的按钮,但我无法从父窗口捕获单击的按钮。使用上一个代码,您可以区分面板上所有可能的按钮,并管理此按钮的不同行为。这里有些奇怪,但实现MouseListener不起作用,因为我无法检测何时单击按钮。我会继续检查的。不过我真的很感谢你对scgr的帮助。谢谢。为了更快地获得更好的帮助,请发布一个。不要扩展框架或其他顶级容器。而是创建并使用一个实例。