Getting the name of a JButton on click

Exikle picture Exikle · Jan 14, 2013 · Viewed 27.7k times · Source
  @Override
  public void actionPerformed(ActionEvent e) {
      if (e.getSource() == thirdBtn) {
          //System.out.println("Third Button Click");
          System.out.println(e.getSource()+" Click");
      }
  }

In the code above, I was wondering if instead of doing this:

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

if I could do something like this:

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

However the code outputs:

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

I don't want this, I want to know how to get the JButton name and output it on click.

EDIT:

Some people are confused. When I say "name" (maybe that's the wrong word for it), I meant say you initialize a JButton

JButton btnExample = new JButton();

I want it so that when you click the button, it outputs btnExample in the console.

Answer

A--C picture A--C · Jan 14, 2013

You can cast to a JComponent if you know that only JComponents will be the return value of e.getSource() I'm using JComponent as the cast since it gives more flexibility. If you're only using JButtons, you can safely cast to a JButton instead.

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

Feel free to replace getName() with getText(), depending on what exactly you need.

Also, the == operator should only be used to compare Object references, so consider casting to a JComponent from the beginning and using .equals() on the names or text.

Edit You can't output the name of the variable, but you can set the name/text of the JComponent. Eg

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

Or if you want "btnExample" to actually be displayed on the button:

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