package javafxdrawpatharray;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.PathElement;
import javafx.stage.Stage;
/**
*
* @web http://java-buddy.blogspot.com/
*/
public class JavaFXDrawPathArray extends Application {
List<Path> pathList;
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(300, 250);
GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
initPathList();
drawSomething(graphicsContext);
StackPane root = new StackPane();
root.getChildren().add(canvas);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void initPathList(){
pathList = new ArrayList<>();
Path p = new Path();
p.getElements().add(new MoveTo(50, 50));
p.getElements().add(new LineTo(50, 200));
p.getElements().add(new LineTo(100, 200));
p.getElements().add(new LineTo(100, 100));
p.getElements().add(new LineTo(200, 100));
pathList.add(p);
p = new Path();
p.getElements().add(new MoveTo(60, 60));
p.getElements().add(new LineTo(60, 210));
p.getElements().add(new LineTo(110, 210));
p.getElements().add(new LineTo(110, 110));
p.getElements().add(new LineTo(210, 110));
pathList.add(p);
p = new Path();
p.getElements().add(new MoveTo(70, 70));
p.getElements().add(new LineTo(70, 220));
p.getElements().add(new LineTo(120, 220));
p.getElements().add(new LineTo(120, 120));
p.getElements().add(new LineTo(220, 120));
pathList.add(p);
}
private void drawSomething(GraphicsContext gc){
gc.setFill(Color.RED);
gc.setStroke(Color.BLUE);
gc.setLineWidth(1);
for(Path p : pathList){
ObservableList<PathElement> l = p.getElements();
gc.beginPath();
for (PathElement pe : l){
if(pe.getClass()==MoveTo.class){
gc.moveTo(((MoveTo)pe).getX(), ((MoveTo)pe).getY());
}else if(pe.getClass()==LineTo.class){
gc.lineTo(((LineTo)pe).getX(), ((LineTo)pe).getY());
}
}
gc.stroke();
gc.closePath();
}
}
}
Use functional operation version:
package javafxdrawpatharray2;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.PathElement;
import javafx.stage.Stage;
/**
*
* @web http://java-buddy.blogspot.com/
*/
public class JavaFXDrawPathArray2 extends Application {
List<Path> pathList;
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(300, 250);
GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
initPathList();
drawSomething(graphicsContext);
StackPane root = new StackPane();
root.getChildren().add(canvas);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void initPathList(){
pathList = new ArrayList<>();
Path p = new Path();
p.getElements().add(new MoveTo(50, 50));
p.getElements().add(new LineTo(50, 200));
p.getElements().add(new LineTo(100, 200));
p.getElements().add(new LineTo(100, 100));
p.getElements().add(new LineTo(200, 100));
pathList.add(p);
p = new Path();
p.getElements().add(new MoveTo(60, 60));
p.getElements().add(new LineTo(60, 210));
p.getElements().add(new LineTo(110, 210));
p.getElements().add(new LineTo(110, 110));
p.getElements().add(new LineTo(210, 110));
pathList.add(p);
p = new Path();
p.getElements().add(new MoveTo(70, 70));
p.getElements().add(new LineTo(70, 220));
p.getElements().add(new LineTo(120, 220));
p.getElements().add(new LineTo(120, 120));
p.getElements().add(new LineTo(220, 120));
pathList.add(p);
}
private void drawSomething(GraphicsContext gc){
gc.setFill(Color.RED);
gc.setStroke(Color.BLUE);
gc.setLineWidth(1);
pathList.stream().map((p) -> p.getElements()).map((l) -> {
gc.beginPath();
l.stream().forEach((pe) -> {
if(pe.getClass()==MoveTo.class){
gc.moveTo(((MoveTo)pe).getX(), ((MoveTo)pe).getY());
}else if(pe.getClass()==LineTo.class){
gc.lineTo(((LineTo)pe).getX(), ((LineTo)pe).getY());
}
});
return l;
}).map((_item) -> {
gc.stroke();
return _item;
}).forEach((_item) -> {
gc.closePath();
});
}
}

No comments:
Post a Comment