我想在使用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
中,我得到按钮的命令值,但我想得到按钮的名称,如b1
或b2
。我怎么能拿到这个?
使用ae.getSource()
方法获取按钮对象本身。类似于:
JButton myButton = (JButton)ae.getSource();
您询问的是获取变量名的问题,这是不应该想要的,因为它具有误导性,并不那么重要,而且在编译的代码中几乎不存在。相反,您应该专注于获取对象引用,而不是变量名。如果必须将对象与String相关联,一种干净的方法是使用Map(如HashMap<String, MyType>
或HashMap<MyType, String>
),具体取决于您希望使用哪个作为键,但也不要过于依赖变量名,因为非最终变量可以随时更改引用,并且对象可以由多个变量引用。
例如,在以下代码中:
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变量不引用原始对象有关系吗?
同样,不要相信可变名称,因为它们经常会误导你。
如果您需要名称,可以通过以下函数获取:
getName
但是您也必须使用setName。
如果你想获得按钮b1、b2,你可以有ae.getSource().
如果您想要可以使用的按钮的标签名称,ae.getName()
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);
}
}