我必须使用Windows(JFrame和非模态JDialog),我想将JDialog附加到JFrame,这样当我移动JFrame时,JDialog也会被移动.同步运动本身不是问题.我通过ComponentListener.componentMoved(.)实现了它.
但附件不应该修复.用户应该可以通过将JDialog从JFrame移开来分离JDialog.只有当JDialog直接放置到JFrame边框时,才应附加它.
为了帮助用户将JDialog紧挨着JFrame(附加它),我想实现一个"磁效应":如果JDialog移动到接近10px到JFrames边界,JDialog应该自动放置在JFrame的旁边.在ComponentListener.componentMoved(.)中检测这种情况也不是问题,而是设置新的JDialog位置:
当我通过JDialog.setLocation(.)设置新位置时,首先正确放置JDialog.但是当我完成对话框拖动(释放鼠标按钮)时,JDialog被放回到先前的位置(距离JFrame 10px).
我认为这是因为在拖动结束时,"系统"也调用setLocation(.).我有什么想法可以防止这种行为?例如,从事件队列中删除任何后续鼠标移动或鼠标释放事件?