【问题标题】:Getting the name of a JButton on click单击时获取 JButton 的名称
【发布时间】:2012-12-27 22:24:56
【问题描述】:
  @Override
  public void actionPerformed(ActionEvent e) {
      if (e.getSource() == thirdBtn) {
          //System.out.println("Third Button Click");
          System.out.println(e.getSource()+" Click");
      }
  }

在上面的代码中,我想知道是否不这样做:

//System.out.println("Third Button Click");

如果我可以这样做:

System.out.println(e.getSource()+" Click");

但是代码输出:

BlackJack.OverBoard$BlackJackButton[,440,395,100x25,alignmentX=0.0,alignmentY=0.5,
    border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@7a3d8738,
    flags=16777504,maximumSize=,minimumSize=,preferredSize=,
    defaultIcon=,disabledIcon=,disabledSelectedIcon=,
    margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],
    paintBorder=false,paintFocus=true,
    pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,
    text=Change,defaultCapable=true] Click

我不想要这个,我想知道如何获取JButton 名称并在点击时输出。

编辑:

有些人很困惑。当我说“名字”时(也许这是错误的词),我的意思是说你初始化了一个JButton

JButton btnExample = new JButton();

我想要这样当你点击按钮时,它会在控制台中输出btnExample

【问题讨论】:

  • 无法做到……按照您现在的方式。你有三个选择。您可以使用JButton#setTextJButton#getText,这是屏幕上显示的文本,JButton#setNameJButton#getName 是内部String 引用,所以它可以是您喜欢的任何内容,或者,您可以创建自己的自己的自定义按钮并修改toString方法-不推荐...
  • “我想要它,这样当您单击按钮时,它会在控制台中输出 btnExample。” 因为此信息可能对 a 的最终用户不可见GUI,如果他们看到它对他们来说毫无意义,似乎这个用例是指在开发过程中运行的代码。我建议这里实际需要的是一个调试器,也许还有一些日志记录。
  • @AndrewThompson 我理解这一点,但这只是我想知道的教育目的。谢谢

标签: java swing jbutton output actionevent


【解决方案1】:
System.out.println(((JButton) e.getSource()).getName() + " Click");

【讨论】:

  • 谢谢,但这不是我的意思:(我问的是如何获取对象的名称。JButton btn; 所以当我调用评论时它输出“btn”
  • @Exikle 定义“名称”。预计会打印什么??
  • +1 这是一个很好的动态方法,而不是检查变量名。
【解决方案2】:

如果您知道只有 JComponents 将是 e.getSource() 的返回值,您可以转换为 JComponent 我使用 JComponent 作为转换,因为它提供了更大的灵活性。如果您只使用JButtons,则可以安全地转换为JButton

  @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == thirdBtn) {
                    //System.out.println("Third Button Click");
                    System.out.println(((JComponent) e.getSource()).getName()+" Click");
                }
            }

随意将getName() 替换为getText(),具体取决于您的具体需要。

另外,== 运算符只能用于比较对象引用,因此请考虑从头开始转换为 JComponent,并在名称或文本上使用 .equals()

编辑 你不能输出变量的名字,但是你可以设置JComponent的名字/文本。 例如

JButton btnExample = new JButton();
btnExample.setName("btnExample");

或者,如果您希望“btnExample”实际显示在按钮上:

JButton btnExample = new JButton();
btnExample.setText("btnExample");

【讨论】:

  • (虽然我知道 OP 说过“名称”,但大多数开发人员从不设置组件“名称”,相反,您可能还想包含一个使用 getText 的示例......恕我直言)
  • @MadProgrammer 您只是收到自动通知,抱歉!我怀疑这与我忘记了e有关,但谁知道呢?
  • 如果否决投票实际上需要选民发表评论,那就太好了!
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 2020-04-05
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多