private class MyCustomButton extends JButton{...}
private class MyCustomButton2 extends MyCustomButton{...}
public class Example1 extends JPanel{
Example1{
MyCustomButton b1=new MyCustomButton("0");
MyCustomButton2 b2=new MyCustomButton1("b2");
}
private class ButtonListener implements ActionListener//, KeyListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println(e);
}
}
在上面的示例中,我有2个JButton,一个是自定义,第二个是第一个。
java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=0,when=1395217216471,modifiers=Button1] on **Example1.MyCustomButton**[,165,0,55x55,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@8a13863,flags=16777504,maximumSize=,minimumSize=,preferredSize=,defaultIcon=pressed.png,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=0,defaultCapable=true]
为了实现我的动作监听器,我知道从printout java能够返回我按下的按钮的类,我该怎么做?
编辑1: 我的目标是实现一个有两类按钮的gui,如果单击一个按钮,我有一组针对该类型按钮的动作,反之亦然,希望它能简化我的动作监听器实现。
答案 0 :(得分:1)
e.getSource().getClass().getName()
返回按钮类的全名。
但你为什么要这样做?
答案 1 :(得分:1)
ActionEvent
提供了引发该事件的source
的引用,在这种情况下,这将是JButton
。
您可以通过将源与已知引用进行比较来检查触发事件的按钮,但使用按钮actionCommand
属性更简单...
if ("name of action".equals(source.getActionCommand())) {...
这假定您设置按钮actionCommand
属性。
如果做不到这一点,你可以了解文字......
JButton btn = (JButton)e.getSource();
if ("0".equals(btn.getText()) {...
就个人而言,这只是一个问题,因为你可能有多个同名的按钮。最好使用按钮actionCommand
属性。
更好的解决方案是使用actions API,这是一个自包含的动作概念,随身携带配置信息,然后你就不在乎......
答案 2 :(得分:0)
在getSource()
中使用ActionEvent
的{{1}}方法:
actionPerformed()
答案 3 :(得分:0)
尝试以下代码
if(e.getSource().getClass()==MyCustomButton.class)
使其更强大,代替
if(e.getSource().getClass().getName.equals("com.x.y.z.MyCustomButton"))
优势:
MyCustomButton
的包,那么它也可以正常工作。