滚动窗格上的玻璃窗格

时间:2013-03-14 07:39:28

标签: java swing drag-and-drop jscrollpane mouse-listeners

我有一个包含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();
    }
}

0 个答案:

没有答案