如何从它的Action Listener中获取java中按钮的类或类型(JButton)?

时间:2014-03-19 08:38:27

标签: java swing awt paintcomponent

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,如果单击一个按钮,我有一组针对该类型按钮的动作,反之亦然,希望它能简化我的动作监听器实现。

4 个答案:

答案 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的包,那么它也可以正常工作。
  • 在编译时捕获包中的更改