0

所以说我有一个 Jpanel(容器),里面有 3 个 Jpanel,它们在一个 JPanel ArrayList 中。现在我希望能够确定鼠标在哪个面板中被按下,以及鼠标在哪个面板中被释放。这样我可以重新排列数组列表中的面板,并以新的顺序将它们添加回容器中。

我目前有可用于交换的代码,但问题是确定正在交换哪些面板。我现在在内部面板上有一个动作监听器,当按下时,容器中的 startIndex 设置为该索引,并且在释放鼠标时分配 endIndex。

@Override
public void mousePressed(MouseEvent e) {
    con.startIndex = (this);
}

@Override
public void mouseReleased(MouseEvent e) {
    con.endIndex = (this);
    con.swap();
}

但它总是试图与按下鼠标的同一个面板交换。有人有什么想法吗?

public void swap() {
    //This swap code works for the two numbers it's given
    System.out.println("start swapping");
    System.out.println(startSwapIndex + " with " + endSwapIndex);

    if(startSwapIndex != endSwapIndex){
        SpecPanel start = this.getSpecPanel(startSwapIndex);
        SpecPanel end = this.getSpecPanel(endSwapIndex);

        panels.set(endSwapIndex, start);
        panels.set(startSwapIndex, end);

        removeAllSpecPanels();
        addAllSpecPanels();

        System.out.println("swap complete");
    }
}

谢谢。

4

1 回答 1

1
Component c =  container.findComponentAt(event.getX(), event.getY());

我认为事件坐标是相对于您单击的面板的,因此您可能需要先将坐标转换为相对于父面板。看:

SwingUtilities.convertPoint(...);

帮助您转换鼠标点。

于 2013-06-17T15:12:06.207 回答