【问题标题】:how to get button name on click event in java如何在java中获取单击事件的按钮名称
【发布时间】:2012-11-29 17:30:24
【问题描述】:

我想在使用 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 中,我正在获取按钮的命令值,但我想获取按钮的名称,例如b1b2。我怎样才能得到这个?

【问题讨论】:

  • 你想得到按钮的引用还是标签?
  • 我想获取按钮的名称而不是按钮的标签
  • 你的“名字”是什么意思?在您的示例中,名称是什么?
  • 1) 为每个按钮添加一个单独的侦听器(或Action)。问题消失。请注意,b1 不是该代码中任何按钮的“名称”。这些按钮都没有用户定义的名称。 2) 只有其中一个按钮可见。 3) 请对代码块使用一致且符合逻辑的缩进。

标签: java swing event-handling awt


【解决方案1】:

使用ae.getSource() 方法获取按钮对象本身。比如:

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

【讨论】:

    【解决方案2】:

    如果你需要名字,有获取它的函数:

    getName

    但你也必须使用 setName。

    【讨论】:

      【解决方案3】:

      您问的是获取变量名,这是您应该想要获得的东西,因为它具有误导性,并不是那么重要,并且几乎不存在于编译代码中。相反,您应该专注于获取对象引用,而不是变量名。如果你必须将一个对象与一个字符串关联,一个干净的方法是使用一个映射,比如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 变量不引用该原始对象是否重要?

      再一次不要相信变量名,因为它们经常会误导你。

      【讨论】:

      • @user1634700:您删除的答案还不错,实际上对于任何学习 Swing 编码的人来说都是很好的建议。为什么要删除它?
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:
        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);
         } 
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-05
          相关资源
          最近更新 更多