问题
@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.
回答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");
回答2:
System.out.println(((JButton) e.getSource()).getName() + " Click");
来源:https://stackoverflow.com/questions/14310331/getting-the-name-of-a-jbutton-on-click