2012-10-13 45 views
1

我只是对以下问题有疑问。我有一个二维数组按钮,当我点击它们时需要我运行另一种方法。我当前的方法依赖于以下输入,一个String(我可以从用户中轻松获得)和两个整数值。这些由阵列中的按钮位置决定。在二维数组Java中查找按钮索引?

我有一个按钮侦听器附加到这些按钮,但我不太清楚我如何能够确定按钮的位置实际上是什么。我做了我自己的按钮类(因为我想要一些特定的设置,我认为这会更容易),并且在实现时,我实现了一个名为getXPos和getYPos的方法,它基本上保存数组中实际按钮的值创建。事情是我不知道如何现在检索这些值,因为听众实际上并不知道按钮被按下的是什么?

我可以使用getSource()方法,但我不知道如何调用该源的方法。例如,我试图做到以下几点。

int x = event.getSource()。getXPos();但我无法做到这一点。有没有什么方法可以告诉我按下了哪个按钮,以便我可以访问它的内部方法或类似的东西?谢谢!

+1

1)*“我做了我自己的按钮类(因为我想要一些特定的设置,我认为它会更容易)“*如果'settings'是指'属性',则使用工厂方法或PLAF代替。 2)为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。 –

+0

另请参阅此[示例](http://stackoverflow.com/a/7706684/230513)。 – trashgod

+0

@AndrewThompson PLAF? – Ungeheuer

回答

2

要在来源上调用方法,您必须首先进行转换。如果你从来没有加入您的ActionListener到任何东西,但你的特殊MyButton其变量x和y的实例,你可以这样做:

MyButton button = (MyButton) event.getSource(); 
int x = button.getXPos(); 
int y = button.getYPos(); 

然后MyButton包含x和y:

public class MyButton extends JButton { 

    private int xPos; 
    private int yPos; 

    // ... 

    public int getXPos() { 
     return xPos; 
    } 

    public int getYPos() { 
     return yPos; 
    } 
} 

并确保你总是将你的监听器实例MyButton

MyButton myButton = new MyButton(); 
// ... 
myButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     MyButton button = (MyButton) e.getSource(); 
     int xPos = button.getXPos(); 
     int yPos = button.getYPos(); 
     // Do something with x and y 
    } 
}); 
+0

完美工作并不知道你也可以投射物体,只认为它是原始物体。解决的问题非常感谢你编辑:确认是的,我为这些特定的按钮做了一个特殊的按钮监听器,而且我的方法与上面非常相似。 – Scott

+0

事实上,铸造适用于一切。看看[关于继承的Java轨迹](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)。它涵盖了除了其他继承属性之外的铸造对象。 – Brian

+0

brian,在你的ActionListener代码中你说'event.getSource()'你的意思是'e.getSource'? – Ungeheuer