1

假设我有 4 个与鼠标按下事件相关的蓝色、白色、红色和绿色方块(myComponent)。在某一时刻,鼠标被按下其中之一——比如说,黄色的那个——并且事件被激活。

现在,控制通量在事件处理函数内部。如何从此处获取导致此问题的 MyComponent(黄色方块)?

编辑

我有另一个问题。有没有办法告诉组件的位置?我的问题比我说的要复杂一些。

基本上,我有一个充满正方形的网格。当我点击其中一个方块时,我必须知道它是哪一个,这样我才能更新我的矩阵。问题是,如果我自己计算,它只适用于给定的分辨率。

我有一个 GridBagLayout,里面是 myComponents。我必须知道究竟是哪一个组件——比如,component[2][2]——导致了中断。

我的意思是,我可以知道是哪个组件做到了这一点,但不能知道它在矩阵中的位置。

4

2 回答 2

4

MouseEvent.getSource()返回最初发生事件的对象。

我有一个GridBagLayout,里面是myComponents. 我必须知道究竟是哪一个组件——比如component[2][2]——导致了中断。

当您将索引添加到矩阵时,您可以将索引存储(2,2)在每个索引中。myComponent这样,给定组件,您始终可以确定其在矩阵中的位置。

class MyComponent extends JButton
{
    final int i; // matrix row
    final int j; // matrix col

    // constructor
    MyComponent(String text, int i, int j)
    {
        super(text);
        this.i = i;
        this.j = j;
    }

    ...
}
于 2009-02-25T01:57:54.787 回答
1

通过添加 a MouseListener(或者MouseAdapter,如果您不需要覆盖所有MouseListener' methods) to each of your colored boxes, when an event such as a mouse click occurs, theMouseListener will be called with a [MouseEvent`] 3,则可以使用它来获取被点击的组件。

例如:

final MyBoxComponent blueBox =   // ... Initialize blue box
final MyBoxComponent whiteBox =  // ... Initialize white box
final MyBoxComponent redBox =    // ... Initialize red box
final MyBoxComponent greenBox =  // ... Initialize green box

MouseListener myListener = new MouseAdapter() {
    public void mouseClicked(MouseEvent e)
    {
        // Obtain the Object which caused the event.
        Object source = e.getSource();

        if (source == blueBox)
        {
            System.out.println("Blue box clicked");
        }
        else if (source == whiteBox)
        {
            System.out.println("White box clicked");
        }
        // ... and so on.
    }
};

blueBox.addMouseListener(myListener);
whiteBox.addMouseListener(myListener);
redBox.addMouseListener(myListener);
greenBox.addMouseListener(myListener);
于 2009-02-25T02:07:15.810 回答