JavaFx创建HatchStyles(类似于C#.Net)
在使用场景形状对象或在JavaFx Canvas上绘图时(在jdk中,第三方库,示例代码等),是否有类似于.Net HatchStyles的填充形状?
我目前能想到的唯一解决方案是使用通过这些.net hatchstyles的图片截图创建的ImagePattern !
GraphicsContext gc = canvas.getGraphicsContext2D(); ImagePattern pattern = new ImagePattern(new Image("dotnet-pattern.png"); gc.setFill(pattern);
.Net填充样式的图形表示:
一种方法是略微修改您的建议:使用ImagePattern
,但为底层图像创建适当的节点。
如果不知道HatchStyle
的外观,下面的变化可能会有效:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.paint.ImagePattern; import javafx.scene.shape.Line; import javafx.scene.shape.StrokeLineCap; import javafx.stage.Stage; public class HatchStyleCanvas extends Application { @Override public void start(Stage primaryStage) { Image hatch = createHatch(); ImagePattern pattern = new ImagePattern(hatch, 0, 0, 20, 20, false); Canvas canvas = new Canvas(600, 600); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setFill(pattern); gc.fillRect(0, 0, 600, 600); primaryStage.setScene(new Scene(new StackPane(canvas))); primaryStage.show(); } private Image createHatch() { Pane pane = new Pane(); pane.setPrefSize(20, 20); Line fw = new Line(-5, -5, 25, 25); Line bw = new Line(-5, 25, 25, -5); fw.setStroke(Color.ALICEBLUE); bw.setStroke(Color.ALICEBLUE); fw.setStrokeWidth(5); bw.setStrokeWidth(5); pane.getChildren().addAll(fw, bw); new Scene(pane); return pane.snapshot(null, null); } public static void main(String[] args) { launch(args); } }
这导致了