5

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

 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)       ;
} 
}

在变量中s,我正在获取按钮的命令值,但我想获取按钮的名称,例如b1or b2。我怎样才能得到这个?

4

5 回答 5

9

使用ae.getSource()方法获取按钮对象本身。就像是:

JButton myButton = (JButton)ae.getSource();
于 2012-12-12T04:01:42.330 回答
5

你问的是获取变量名,这是你应该想要的,因为它具有误导性,并不是那么重要,而且编译代码中几乎不存在。相反,您应该专注于获取对象引用,而不是变量名。如果你必须将一个对象与一个字符串关联,一个干净的方法是使用一个 Map ,例如 aHashMap<String, MyType>HashMap<MyType, String>取决于你希望用作键的,但同样不要过于依赖变量名,因为非-final 变量可以随时更改引用,并且对象可以被多个变量引用。

例如在以下代码中:

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 变量不引用该原始对象是否重要?

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

于 2012-12-12T04:07:25.547 回答
1

如果您需要名称,可以使用以下函数获取它:

获取名称

但你也必须使用 setName 。

于 2012-12-12T04:05:16.793 回答
1

如果你想得到按钮 b1, b2 你可以有ae.getSource()

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

于 2012-12-12T04:10:22.617 回答
0
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)
 {
JButton myButton = (JButton)ae.getSource();
 String s=myButton.getText();
 System.out.println("s is"+s);
 } 
}
于 2021-02-19T18:40:28.530 回答