2014-12-01 39 views
0

我有一个JavaFX应用程序,它有一个可滚动区域。在该可滚动区域中,可以添加各种类型的可拖动节点。你会认为,如果你拖拽一个节点到边缘,它会朝那个方向滚动。但是,它朝相反的方向滚动。JavaFX - 向后拖动节点+ ScrollPane?

拖动作品如:

 myNode.setOnMousePressed(new EventHandler<MouseEvent>(){ 
     @Override 
     public void handle(MouseEvent t){ 
       originalX1 = 200; 
       originalY1 = 200; 
       newX1 = ((WebView)(t.getSource())).getTranslateX(); 
       newY1 = ((WebView)(t.getSource())).getTranslateY(); 

       System.out.println("(" + newX1 + ", " + newY1 + ")"); 
     } 
    }); 
    myNode.setOnMouseDragged(new EventHandler<MouseEvent>(){ 
     @Override 
     public void handle(MouseEvent t){ 
       double offsetX = t.getSceneX() - 210; 
       double offsetY = t.getSceneY() - 220; 
       double newTranslateX = newX + offsetX; 
       double newTranslateY = newY + offsetY; 

       ((NodeType)(t.getSource())).setTranslateX(newTranslateX); 
       ((NodeType)(t.getSource())).setTranslateY(newTranslateY); 

       System.out.println("(" + newTranslateX + ", " + newTranslateY + ")"); 

     } 
    }); 
+0

你有没有在您拖动或者是web视图的“滚动”区域滚动窗格? – Kalaschni 2014-12-03 08:41:49

+0

Woops,我打算把它改成NodeType。它是各种不同的节点类型,可在锚窗格内拖动,适合滚动窗格。谢谢你的回应,我不认为我会得到任何东西。 @Kalaschni – user2130057 2014-12-04 06:08:30

回答

0

如果你想在一个ScrollPane滚动你应该使用Hvalue和ScrollPane的Vvalue
作为一种方法,是这样的:

if (scrollPane.getViewportBounds().getWidth() - t.getSceneX() <= 20) { // Look if the user dragged to the right border 
    // Set the horizontal scroll-bar 3% wider 
    scrollPane.setHvalue(scrollPane.getHvalue() + 0.03); 
} else if (scrollPane.getViewportBounds().getHeight() - t.getSceneY() <= 20) { // Look if the user dragged to the bottom border 
    // Set the vertical scroll-bar 3% wider 
    scrollPane.setVvalue(scrollPane.getVvalue() + 0.03); 
} 
// @TODO Do this for the top and left border too 

编码快乐,
Kalasch

相关问题