所以说我有一个内部有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");
}
}
感谢。
答案 0 :(得分:1)
Component c = container.findComponentAt(event.getX(), event.getY());
我认为事件坐标是相对于您单击的面板的,因此您可能需要先将坐标转换为相对于父面板。参见:
SwingUtilities.convertPoint(...);
帮助您转换鼠标点。