我有一个包含JSplitPane的JFrame,每个分割窗格都包含一个JScrollPane。在整个JFrame的顶部设置一个玻璃窗格。在大多数情况下,这可以实现我想要的 - 在两个JScrollPanes之间进行拖放。但是,将玻璃窗格放在顶部也意味着我无法在任何一个JScrollPanes中滚动。有没有办法在不拆分玻璃窗格的情况下正确地重定向JScrollPanes的那些部分的焦点?
修改
我查看了教程,我认为问题在于我正在尝试重新发送MouseDragged而不是单击的事件。以下是我之前尝试的内容,但它会导致非常缓慢的拖动。本质上这个代码应该重新调度并允许拖动滚动条;否则,允许在玻璃窗格周围拖动对象(DragLabels
)。
@Override
public void mouseDragged(MouseEvent arg0) {
location = new Point(arg0.getX(), arg0.getY());
Component com = SwingUtilities.getDeepestComponentAt(this.content, arg0.getX(), arg0.getY());
if(com.getClass().getName() == "javax.swing.JScrollPane$ScrollBar") {
Point componentPoint = SwingUtilities.convertPoint(this,
arg0.getPoint(), com);
com.dispatchEvent(new MouseEvent(com, arg0.getID(), arg0.getWhen(),
arg0.getModifiers(), componentPoint.x, componentPoint.y,
arg0.getClickCount(), arg0.isPopupTrigger()));
this.redispatched = true;
return;
}
if(dragged == null && com.getClass().getName() == "drag.DragLabel") {
dragged = ((DragLabel)com).icon;
}
if(dragged != null) {
repaint();
}
}