确定按下哪个面板,以及释放哪个面板

时间:2013-06-17 08:24:16

标签: java swing jpanel awt swap

所以说我有一个内部有3个Jpanel的Jpanel(容器),它们位于JPanel ArrayList中。现在我希望能够确定鼠标被按入哪个面板,以及鼠标被释放到哪个面板中这样我可以重新排列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");
    }
}

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

SwingUtilities.convertPoint(...);

帮助您转换鼠标点。