Java onclick我想获得JFrame上存在的JPanel的名称

Java onclick我想获得JFrame上存在的JPanel的名称,java,swing,jframe,awt,mouselistener,Java,Swing,Jframe,Awt,Mouselistener,下面是我试图实现的,但在提到的行中给出了错误;这是因为函数无法获取哪个组件。getName()属于。。。 字符串名称=新字符串() 通过MouseEvent的getSource()方法获取单击的对象。然后调用它的getName()方法 mntmOneToOne.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent mouseEvent) { in

下面是我试图实现的,但在提到的行中给出了错误;这是因为函数无法获取哪个组件。getName()属于。。。 字符串名称=新字符串()


通过MouseEvent的
getSource()
方法获取单击的对象。然后调用它的
getName()
方法

mntmOneToOne.addMouseListener(new MouseAdapter() {
     @Override
     public void mouseClicked(MouseEvent mouseEvent) {
         int count = mouseEvent.getClickCount();
         if (count == 1) {
           Component panel = (Component)mouseEvent.getSource();
           name = panel.getName(); 
         }
     }
});
请参见此示例:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

    public class PanelTest extends JFrame {
        List<JPanel> panels;
        public PanelTest(){
            panels = new ArrayList<>();
            setLayout(new GridLayout(2,3));
            Color [] color = {Color.white,Color.black,Color.blue,Color.red,Color.orange,Color.gray};
            for(int i = 0 ; i < 6;i++)
            {
                panels.add(new JPanel());
                panels.get(i).setName("Panel "+i);
                panels.get(i).addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent ev){
                                        //JPanel p = (JPanel)ev.getSource();
                        System.out.println(((JPanel)ev.getSource()).getName());
                        }
                    });
                panels.get(i).setBackground(color[i]);
                getContentPane().add(panels.get(i));
            }
            setVisible(true);
            setDefaultCloseOperation(3);
            setSize(400,400);
        }

        public static void main(String...args){
            new PanelTest();
            }

    }
import javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
导入java.util.ArrayList;
导入java.util.List;
公共类PanelTest扩展了JFrame{
名单小组;
公共小组测试(){
panels=newarraylist();
setLayout(新网格布局(2,3));
颜色[]颜色={Color.white,Color.black,Color.blue,Color.red,Color.orange,Color.gray};
对于(int i=0;i<6;i++)
{
panels.add(新的JPanel());
Panel.get(i).setName(“Panel”+i);
panels.get(i).addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent ev){
//JPanel p=(JPanel)ev.getSource();
System.out.println(((JPanel)ev.getSource()).getName());
}
});
面板。获取(i)挫折背景(颜色[i]);
getContentPane().add(panels.get(i));
}
setVisible(真);
设置默认关闭操作(3);
设置大小(400400);
}
公共静态void main(字符串…参数){
新的PanelTest();
}
}

“下面的一行显示错误,因为它不知道是关于哪个面板的…”
——我们也不知道。它是关于哪个面板的?点击的那个?如果是,则对MouseEvent对象调用
getSource()
。如果没有,请将您可能谈论的内容填写给我们。请告诉你的问题的细节。我有2个3个面板有一个特定的名称;在JFrame上好的。。。现在我的问题是,当我点击面板时,我想在控制台上打印它的名称,我已经在构造函数中通过panelx.setName(text)分配给它了。@alex23:no!!System.out.println(panel.getName());未在控制台上打印名称。。检查控制台上是否未打印编辑的版本名。。请检查我的编辑版本implemented@Asdakamessoy:当然不是在控制台中打印。你需要有一个println来实现它。我添加了System.out.println(panel.getName())。。。还是没有output@Asdakamessoy:那么您没有向我们显示的代码中的其他地方有一个错误,例如没有将MouseListener添加到正确的组件,或者谁知道是什么?您应该创建并发布一个。
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

    public class PanelTest extends JFrame {
        List<JPanel> panels;
        public PanelTest(){
            panels = new ArrayList<>();
            setLayout(new GridLayout(2,3));
            Color [] color = {Color.white,Color.black,Color.blue,Color.red,Color.orange,Color.gray};
            for(int i = 0 ; i < 6;i++)
            {
                panels.add(new JPanel());
                panels.get(i).setName("Panel "+i);
                panels.get(i).addMouseListener(new MouseAdapter(){
                    public void mouseClicked(MouseEvent ev){
                                        //JPanel p = (JPanel)ev.getSource();
                        System.out.println(((JPanel)ev.getSource()).getName());
                        }
                    });
                panels.get(i).setBackground(color[i]);
                getContentPane().add(panels.get(i));
            }
            setVisible(true);
            setDefaultCloseOperation(3);
            setSize(400,400);
        }

        public static void main(String...args){
            new PanelTest();
            }

    }