java中如何在点击事件中获取按钮名称

java中如何在点击事件中获取按钮名称,java,swing,event-handling,awt,Java,Swing,Event Handling,Awt,我想在使用Swing单击按钮时获得button对象的名称。我正在实现以下代码: class test extends JFrame implements ActionListener { JButton b1,b2; test() { Container cp=this.getContentPane(); b1= new JButton("ok"); b2= new JButton("hi"); c

我想在使用Swing单击按钮时获得button对象的名称。我正在实现以下代码:

 class  test extends JFrame implements ActionListener
  {
   JButton b1,b2;
   test()
   {
    Container cp=this.getContentPane();
    b1= new JButton("ok");
    b2= new JButton("hi");
    cp.add(b1);cp.add(b2);
    b1.addActionListener(this);
    b2.addActionListener(this);
   }
public void actionPerformed(ActionEvent ae)
 {
 String s=ae.getActionCommand();
 System.out.println("s is"+s)       ;
} 
}
JButton b1 = new JButton("My Button");
JButton b2 = b1;
在变量
s
中,我得到按钮的命令值,但我想得到按钮的名称,如
b1
b2
。如何获取此信息?

使用该方法获取按钮对象本身。比如:

JButton myButton = (JButton)ae.getSource();

如果您需要名称,可以通过以下函数获取:


但是您也必须使用setName。

您正在询问如何获取变量名,这是您不希望得到的,因为它具有误导性,并且实际上并不重要,而且几乎不存在于编译代码中。相反,您应该专注于获取对象引用,而不是变量名。如果必须将对象与字符串相关联,一种干净的方法是使用映射,如
HashMap
HashMap
,这取决于您希望用作键的对象,但同样不要过多地依赖变量名,因为非最终变量可以在瞬间更改引用,对象可以由多个变量引用

例如,在以下代码中:

 class  test extends JFrame implements ActionListener
  {
   JButton b1,b2;
   test()
   {
    Container cp=this.getContentPane();
    b1= new JButton("ok");
    b2= new JButton("hi");
    cp.add(b1);cp.add(b2);
    b1.addActionListener(this);
    b2.addActionListener(this);
   }
public void actionPerformed(ActionEvent ae)
 {
 String s=ae.getActionCommand();
 System.out.println("s is"+s)       ;
} 
}
JButton b1 = new JButton("My Button");
JButton b2 = b1;
名称是哪个变量名?b1和b2都引用相同的JButton对象

在这里:

JButton b1 = new JButton("My Button");
b1 = new JButton("My Button 2");
第一个JButton对象的变量名是什么?b1变量不引用原始对象是否重要


同样,不要相信变量名,因为它们通常会误导您。

如果您想获得按钮b1、b2,可以使用ae.getSource()


如果您想要可以使用的按钮的标签名称,ae.getName()

您想要获取按钮的引用或标签吗?我想要获取按钮的名称,而不是按钮的标签“名称”是什么意思?在您的示例中,名称是什么?1)为每个按钮添加一个单独的侦听器(或
操作
)。问题消失了。请注意,
b1
不是该代码中任何按钮的“名称”。这两个按钮都没有用户定义的名称。2) 这些按钮中只有一个是可见的。3) 请对代码块使用一致且合乎逻辑的缩进。@user1634700:您删除的答案不错,事实上,对于任何学习Swing编码的人都是一个很好的建议。为什么要删除它?