Getting the name of a JButton on click

28,800

Solution 1

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");

Solution 2

System.out.println(((JButton) e.getSource()).getName() + " Click");
Share:
28,800
Exikle
Author by

Exikle

Aspiring Software Engineer and Game Designer https://www.github.com/Exikle https://exikle.github.io

Updated on July 09, 2022

Comments

  • Exikle
    Exikle almost 2 years
      @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.

  • Exikle
    Exikle over 11 years
    Thank you but this is not what i meant :( Im asking for how to get the Name of the object. JButton btn; So when i call the comment it outputs "btn"
  • MadProgrammer
    MadProgrammer over 11 years
    (While I know the OP has said "name", most developers never set a components "name", instead, you might want to include an example using getText as well ... IMHO)
  • MadProgrammer
    MadProgrammer over 11 years
    @Exikle Define "name". What are expected to be printed??
  • David Kroukamp
    David Kroukamp over 11 years
    +1 this is a nice dynamic approach rather than checking against the variable name.
  • A--C
    A--C over 11 years
    @MadProgrammer You just get auto-notified, sorry! I suspect it had to do with me forgetting the e, but who knows?
  • MadProgrammer
    MadProgrammer over 11 years
    It would nice if down voting actually required the voter to leave a comment!