Skip to content

Instantly share code, notes, and snippets.

@almibe
Created April 3, 2016 15:43
Show Gist options
  • Save almibe/d97fb19e202c7445f501df797e9b9f85 to your computer and use it in GitHub Desktop.
Save almibe/d97fb19e202c7445f501df797e9b9f85 to your computer and use it in GitHub Desktop.
Simple example of drag and drop replacement (similar to how tabs work)
package org.almibe.multipage.demo;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import java.util.ArrayList;
import java.util.List;
public class DnDSample extends Application {
public static void main(String[] args) {
launch(args);
}
private MouseEvent dragDetected;
@Override
public void start(Stage primaryStage) {
HBox display = new HBox();
List<Rectangle> rectangleList = createList(display);
display.getChildren().addAll(rectangleList);
primaryStage.setScene(new Scene(display, 1000, 450));
primaryStage.show();
}
public List<Rectangle> createList(HBox hBox) {
List<Rectangle> rectangles = new ArrayList<>();
rectangles.add(new Rectangle(200, 250, Color.GRAY));
rectangles.add(new Rectangle(200, 250, Color.BLUEVIOLET));
rectangles.add(new Rectangle(200, 250, Color.SALMON));
rectangles.add(new Rectangle(200, 250, Color.PALEGREEN));
for (Rectangle rectangle : rectangles) {
rectangle.setOnMouseReleased(event -> event.consume());
rectangle.setOnDragDetected(event -> {
rectangle.startFullDrag();
dragDetected = event;
event.consume();
});
rectangle.setOnMouseDragged(event -> event.consume());
rectangle.setOnMouseDragEntered(event -> {
Rectangle sourceRectangle = ((Rectangle)event.getGestureSource());
Rectangle targetRectangle = ((Rectangle)event.getTarget());
if (sourceRectangle == targetRectangle) return;
int sourceIndex = hBox.getChildren().indexOf(sourceRectangle);
int targetIndex = hBox.getChildren().indexOf(targetRectangle);
// Collections.swap(hBox.getChildren(), sourceIndex, targetIndex);
if (sourceIndex > targetIndex) {
hBox.getChildren().remove(sourceRectangle);
hBox.getChildren().add(targetIndex, sourceRectangle);
//multiPageDisplay.setSelectedPage(sourceRectangle);
//MouseDragEvent.fireEvent(sourceRectangle, dragDetected);
} else {
for(int i = sourceIndex+1; i-1 < targetIndex; i++) {
Node removedNode = hBox.getChildren().remove(i);
hBox.getChildren().add(i-1, removedNode);
}
//multiPageDisplay.setSelectedPage(sourceRectangle);
//MouseDragEvent.fireEvent(sourceRectangle,dragDetected);
}
//rectangle.setMouseTransparent(false);
event.consume();
});
rectangle.setOnMouseDragReleased(event -> event.consume());
}
return rectangles;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment