Java 如何获取并打印包含JButton的变量的名称?

Java 如何获取并打印包含JButton的变量的名称?,java,swing,variables,jbutton,Java,Swing,Variables,Jbutton,我想知道是否可以获取并打印JButton的名称 鉴于此代码: JButton button1 = new JButton(); JButton button1 = new JButton("Foo"); JButton button2 = button1; 我怎样才能拿回按钮1 我试过: button.getName() 但它又回来了 null Swingname属性默认为null。你需要设置它们 button.setName("name"); 我猜,您真的希望JButton显示文本,

我想知道是否可以获取并打印
JButton
的名称

鉴于此代码:

JButton button1 = new JButton();
JButton button1 = new JButton("Foo");
JButton button2 = button1;
我怎样才能拿回
按钮1

我试过:

button.getName()
但它又回来了

null

Swing
name
属性默认为
null
。你需要设置它们

button.setName("name");

我猜,您真的希望JButton显示文本,而不是它的name属性。如果是这样,请查看

button.getText();
// or
button.getActionCommand();
如果您正在寻找变量名,那么这是无法通过方法调用获得的,也不应该是,因为对象可以由许多变量引用,或者可能是集合或数组的一部分,因此对象的变量名几乎是一个无意义的概念

寓意:通过给我们你的背景故事来澄清你的问题,你想做什么,而不是怎么做


编辑
你在评论中说,

获取按钮的名称,例如,如果我有一个名为JButton button1=new JButton()的按钮;我想打印这个按钮的名称,它是button1

你把变量名和对象名搞混了<上面的code>button1是JButton变量的名称,但不是它引用的对象,因为对象没有名称

通常不可能通过调用对象上的方法来获取对象的变量“name”,因为许多对象甚至没有名称,例如,如果它们是集合的一部分,或者单个对象可能被许多变量引用,那么您需要哪个“name”

例如,假设您有以下代码:

JButton button1 = new JButton();
JButton button1 = new JButton("Foo");
JButton button2 = button1;
这里创建的JButton对象的“名称”是什么?button1和button2都指向完全相同的JButton对象,因此这里没有对象的名称

再说一遍,你不是在告诉我们你想做什么,而是在告诉我们你想怎么做。你的问题是一个经典问题,只有当你告诉我们整个问题时,你的问题才会得到解决

如果您试图找出按下了哪个JButton,ActionListener的actionPerformed ActionEvent参数有一个
getSource()
方法,该方法将返回对按下的按钮对象的引用,您可以使用它。你如何使用它将取决于你需要告诉我们的问题的细节

例如:

// inside of an ActionListener
public void actionPerformed(ActionEvent evt) {
  // this will get you a reference to the button object that was pressed:
  AbstractButton sourceBtn = (AbstractButton) evt.getSource();

  // now you can use the sourceBtn object, or compare its reference to your 
  // JButton variables or collections in your GUI
  // for example if your GUI has buttons in a List<JButton> you could
  for (JButton button : buttonList) {
    if (sourceBtn == button) {
      // you've found your button of interest!
    }
  }
}
//在ActionListener内部
已执行的公共无效操作(操作事件evt){
//这将为您提供对已按下按钮对象的引用:
AbstractButton sourceBtn=(AbstractButton)evt.getSource();
//现在,您可以使用sourceBtn对象,或将其引用与
//GUI中的JButton变量或集合
//例如,如果GUI的列表中有按钮,则可以
用于(JButton按钮:按钮列表){
如果(sourceBtn==按钮){
//你找到了你感兴趣的按钮!
}
}
}

如果要获取按钮上的文本,则需要使用getText()方法。所以你的解决方案是

button.getText()

你给你的按钮设置了名字了吗?使用
setName(字符串s)
。或者您想获取按钮的文本?名称是什么意思?如果您询问是否可以获取存储实例的字段的名称,no.Related:@user3288493:不,不可能获取对象的变量“name”,因为许多变量甚至没有名称或被许多变量引用,而且您没有告诉我们您要做什么,而是你想怎么做。你的问题是一个经典问题,只有在你告诉我们整个问题时才能解决。这个问题似乎离题了,因为它是关于一个经典问题,OP似乎不愿意或无法描述他们试图实现的实际目标。我已经给我的按钮起了名字,遵循这个规则我的第一个按钮=按钮1,第二个按钮2、第三个按钮3等等。@user3288493:您没有设置按钮的name属性,并且对名称的含义感到非常困惑。同样,请澄清您试图做什么,而不是如何做。@user3288493请发布一条消息,告诉我们您正在尝试什么。我想获取按钮名称。e、 g.如果我有一个名为JButton button1=新JButton()的按钮;我想打印出这个按钮的名称button1.hi,所以当你在每个按钮列表中循环时,你将它存储在变量按钮中?然后在if语句中使用哪个来检查它是否等于本例中给出的按钮文本?