2015-06-04 58 views
0

場景:我有兩個面板其中一個具有滑塊,另一個具有拖動山牆面板。情況I:如果窗格(即Drag gable)向前或向後移動,滑動條上的節點移動時,窗格的相同方向上的相應尺寸移動。情況二:此功能反之亦然。 (拖動山牆窗格滑塊)
(滑塊拖動山牆窗格)。javafx:根據拖動的節點移動滑塊節點

所以我怎麼能實現它.. 謝謝!

回答

0

您爲水平方向創建一個屬性。然後,只要滑塊或窗格移動,就可以更改屬性。根據您更改的屬性更改窗格。

public class Main extends Application { 

    DoubleProperty xProperty = new SimpleDoubleProperty(); 

    double min = 0; 
    double max = 100; 


    @Override 
    public void start(Stage primaryStage) { 
     try { 
      Pane root = new Pane(); 

      // rectangle 
      Pane pane = new Pane(); 
      pane.setStyle("-fx-background-color:blue"); 
      pane.setPrefSize(50, 50); 
      pane.relocate(min, 50); 

      // make rectangle movable 
      MouseGestures mg = new MouseGestures(); 
      mg.makeDraggable(pane); 

      // slider 
      Slider slider = new Slider(min, max, min); 
      slider.valueProperty().bindBidirectional(xProperty); 
      root.getChildren().addAll(slider, pane); 

      // move horizontally, clamp horizontal movement 
      xProperty.addListener(new ChangeListener<Number>() { 

       @Override 
       public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 

        // clamp x 
        double x = newValue.doubleValue(); 

        if(x < min) { 
         x = min; 
        } 

        if(x > max) { 
         x = max; 
        } 

        pane.relocate(x, pane.getBoundsInParent().getMinY()); 

       } 

      }); 



      Scene scene = new Scene(root,1024,768); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 


    public class MouseGestures { 

     final DragContext dragContext = new DragContext(); 

     public void makeDraggable(final Node node) { 

      node.setOnMousePressed(onMousePressedEventHandler); 
      node.setOnMouseDragged(onMouseDraggedEventHandler); 

     } 

     EventHandler<MouseEvent> onMousePressedEventHandler = new EventHandler<MouseEvent>() { 

      @Override 
      public void handle(MouseEvent event) { 

       Node node = (Node) event.getSource(); 
       dragContext.x = node.getBoundsInParent().getMinX() - event.getScreenX(); 

      } 
     }; 

     EventHandler<MouseEvent> onMouseDraggedEventHandler = new EventHandler<MouseEvent>() { 

      @Override 
      public void handle(MouseEvent event) { 

       double offsetX = event.getScreenX() + dragContext.x; 

       xProperty.set(offsetX); 

      } 
     }; 

     class DragContext { 

      double x; 

     } 

    } 
} 
+0

嘿你好,真棒....謝謝你..! – Jordaon