0
場景:我有兩個面板其中一個具有滑塊,另一個具有拖動山牆面板。情況I:如果窗格(即Drag gable)向前或向後移動,滑動條上的節點移動時,窗格的相同方向上的相應尺寸移動。情況二:此功能反之亦然。 (拖動山牆窗格滑塊)
(滑塊拖動山牆窗格)。javafx:根據拖動的節點移動滑塊節點
所以我怎麼能實現它.. 謝謝!
場景:我有兩個面板其中一個具有滑塊,另一個具有拖動山牆面板。情況I:如果窗格(即Drag gable)向前或向後移動,滑動條上的節點移動時,窗格的相同方向上的相應尺寸移動。情況二:此功能反之亦然。 (拖動山牆窗格滑塊)
(滑塊拖動山牆窗格)。javafx:根據拖動的節點移動滑塊節點
所以我怎麼能實現它.. 謝謝!
您爲水平方向創建一個屬性。然後,只要滑塊或窗格移動,就可以更改屬性。根據您更改的屬性更改窗格。
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;
}
}
}
嘿你好,真棒....謝謝你..! – Jordaon