下面列出了怎么用javafx.scene.shape.Polygon的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
protected Node initBottomGui() {
Polygon shape = new Polygon();
shape.getPoints().setAll(chunkPositions.stream().flatMap(v -> Stream.of(v.x(), v.y())).map(d -> (d + 1) * 16.0).collect(Collectors.toList()));
shape.setFill(new ImagePattern(image, 0, 0, 16, 16, false));
getTopGui().hoverProperty().addListener(e -> {
if (getTopGui().isHover())
shape.setOpacity(0.6);
else
shape.setOpacity(0.2);
});
shape.setOpacity(0.2);
shape.setMouseTransparent(true);
shape.setCache(true);
shape.setCacheHint(CacheHint.SCALE);
shape.setViewOrder(1);
return shape;
}
public static final boolean isInPolygon(final double X, final double Y, final Polygon POLYGON) {
List<Double> points = POLYGON.getPoints();
int noOfPointsInPolygon = POLYGON.getPoints().size() / 2;
double[] pointsX = new double[noOfPointsInPolygon];
double[] pointsY = new double[noOfPointsInPolygon];
int pointCounter = 0;
for (int i = 0; i < points.size(); i++) {
if (i % 2 == 0) {
pointsX[i] = points.get(pointCounter);
} else {
pointsY[i] = points.get(pointCounter);
pointCounter++;
}
}
return isInPolygon(X, Y, noOfPointsInPolygon, pointsX, pointsY);
}
@Override
public Region getGraphic(Graph graph) {
final double width = 50;
final double height = 50;
final Polygon view = new Polygon(width / 2, 0, width, height, 0, height);
view.setStroke(Color.RED);
view.setFill(Color.RED);
final Pane pane = new Pane(view);
pane.setPrefSize(50, 50);
final Scale scale = new Scale(1, 1);
view.getTransforms().add(scale);
scale.xProperty().bind(pane.widthProperty().divide(50));
scale.yProperty().bind(pane.heightProperty().divide(50));
CellGestures.makeResizable(pane);
return pane;
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (0, 0, 20, 20);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(29);
polygon.setLayoutY(21);
polygon.setRotate(135);
Rectangle r2 = new Rectangle (50, 50, 20, 20);
r2.setArcHeight(4);
r2.setArcWidth(4);
r2.setFill(Color.web("#ed4b00"));
r2.setOpacity(0.5);
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (22, 0, 64, 64);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00",0.5));
r1.getTransforms().add(new Shear(-0.35, 0));
Polygon polygon = createArrow();
polygon.setLayoutX(-5);
polygon.setLayoutY(-2);
polygon.setRotate(90);
Rectangle r2 = new Rectangle (0, 0, 64, 64);
r2.setArcHeight(4);
r2.setArcWidth(4);
r2.setFill(Color.web("#ed4b00", 0.25));
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (0, 0, 64, 64);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(65);
polygon.setLayoutY(5);
polygon.setRotate(165);
Rectangle r2 = new Rectangle (0, 0, 64, 64);
r2.setArcHeight(15);
r2.setArcWidth(15);
r2.setFill(Color.web("#ed4b00"));
r2.setRotate(60);
r2.setOpacity(0.5);
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (50, 50, 14, 14);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(68);
polygon.setLayoutY(25);
polygon.setRotate(45);
Rectangle r3 = new Rectangle (25, 25, 64, 64);
r3.setArcHeight(15);
r3.setArcWidth(15);
r3.setFill(Color.web("#f49b00"));
javafx.scene.Group g = new javafx.scene.Group(r3,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
Polygon polygon = new Polygon(new double[]{
45 , 10 ,
10 , 80 ,
80 , 80 ,
});
polygon.setStroke(Color.web("#b9c0c5"));
polygon.setStrokeWidth(5);
polygon.getStrokeDashArray().addAll(15d,15d);
polygon.setFill(null);
javafx.scene.effect.InnerShadow effect = new javafx.scene.effect.InnerShadow();
effect.setOffsetX(1);
effect.setOffsetY(1);
effect.setRadius(3);
effect.setColor(Color.rgb(0,0,0,0.6));
polygon.setEffect(effect);
return polygon;
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (0, 0, 20, 20);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(29);
polygon.setLayoutY(21);
polygon.setRotate(135);
Rectangle r2 = new Rectangle (50, 50, 20, 20);
r2.setArcHeight(4);
r2.setArcWidth(4);
r2.setFill(Color.web("#ed4b00"));
r2.setOpacity(0.5);
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (22, 0, 64, 64);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00",0.5));
r1.getTransforms().add(new Shear(-0.35, 0));
Polygon polygon = createArrow();
polygon.setLayoutX(-5);
polygon.setLayoutY(-2);
polygon.setRotate(90);
Rectangle r2 = new Rectangle (0, 0, 64, 64);
r2.setArcHeight(4);
r2.setArcWidth(4);
r2.setFill(Color.web("#ed4b00", 0.25));
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (0, 0, 64, 64);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(65);
polygon.setLayoutY(5);
polygon.setRotate(165);
Rectangle r2 = new Rectangle (0, 0, 64, 64);
r2.setArcHeight(15);
r2.setArcWidth(15);
r2.setFill(Color.web("#ed4b00"));
r2.setRotate(60);
r2.setOpacity(0.5);
javafx.scene.Group g = new javafx.scene.Group(r2,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
final Rectangle r1 = new Rectangle (50, 50, 14, 14);
r1.setArcHeight(4);
r1.setArcWidth(4);
r1.setFill(Color.web("#ed4b00"));
Polygon polygon = createArrow();
polygon.setLayoutX(68);
polygon.setLayoutY(25);
polygon.setRotate(45);
Rectangle r3 = new Rectangle (25, 25, 64, 64);
r3.setArcHeight(15);
r3.setArcWidth(15);
r3.setFill(Color.web("#f49b00"));
javafx.scene.Group g = new javafx.scene.Group(r3,r1, polygon);
return new javafx.scene.Group(g);
}
public static Node createIconContent() {
Polygon polygon = new Polygon(new double[]{
45 , 10 ,
10 , 80 ,
80 , 80 ,
});
polygon.setStroke(Color.web("#b9c0c5"));
polygon.setStrokeWidth(5);
polygon.getStrokeDashArray().addAll(15d,15d);
polygon.setFill(null);
javafx.scene.effect.InnerShadow effect = new javafx.scene.effect.InnerShadow();
effect.setOffsetX(1);
effect.setOffsetY(1);
effect.setRadius(3);
effect.setColor(Color.rgb(0,0,0,0.6));
polygon.setEffect(effect);
return polygon;
}
public static final boolean isInPolygon(final double X, final double Y, final Polygon POLYGON) {
List<Double> points = POLYGON.getPoints();
int noOfPointsInPolygon = POLYGON.getPoints().size() / 2;
double[] pointsX = new double[noOfPointsInPolygon];
double[] pointsY = new double[noOfPointsInPolygon];
int pointCounter = 0;
for (int i = 0 ; i < points.size() ; i++) {
if (i % 2 == 0) {
pointsX[i] = points.get(pointCounter);
} else {
pointsY[i] = points.get(pointCounter);
pointCounter++;
}
}
return isInPolygon(X, Y, noOfPointsInPolygon, pointsX, pointsY);
}
@Override
public void start(Stage primaryStage) throws Exception {
final Polygon p = new Polygon(10, 30, 20, 20, 20, 40);
p.setFill(Color.RED);
p.setStroke(Color.BLACK);
final Rectangle r = new Rectangle();
r.setFill(new Color(0, 0, 1, 0.5));
r.setX(p.getLayoutBounds().getMinX());
r.setY(p.getLayoutBounds().getMinY());
r.setWidth(p.getLayoutBounds().getWidth());
r.setHeight(p.getLayoutBounds().getHeight());
Group g = new Group(r, p);
g.getTransforms().add(new Scale(10, 10));
Scene scene = new Scene(g, 500, 500);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
private Node createArrow(final boolean left) {
// shape
final Polygon arrow = new Polygon();
arrow.getPoints().addAll(left ? LEFT_ARROW_POINTS : RIGHT_ARROW_POINTS);
// style
arrow.setStrokeWidth(ARROW_STROKE_WIDTH);
arrow.setStroke(ARROW_STROKE);
arrow.setFill(ARROW_FILL);
// effect
effectOnHover(arrow, new DropShadow(DROP_SHADOW_RADIUS, getHighlightColor()));
// action
arrow.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
traverse(left);
}
});
return arrow;
}
private JFXButton createNextButton(TreeItem temp) {
return new JFXButton(temp.getValue().toString()) {
{
setPadding(new Insets(getOffset(), 1.5 * getOffset(), getOffset(), 2 * getOffset()));
setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));
}
@Override
protected void layoutChildren() {
super.layoutChildren();
double width = getWidth();
Polygon polygon = new Polygon();
final double height = getHeight();
polygon.getPoints().addAll(new Double[] {
0.0, 0.0,
width - getOffset(), 0.0,
width, height / 2,
width - getOffset(), height,
0.0, height,
getOffset(), height / 2});
setClip(polygon);
}
};
}
public JFXButton createFirstButton(TreeItem temp) {
return new JFXButton(temp.getValue().toString()) {
{
setPadding(new Insets(getOffset(), 1.5 * getOffset(), getOffset(), getOffset()));
setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));
}
@Override
protected void layoutChildren() {
super.layoutChildren();
double width = getWidth();
Polygon polygon = new Polygon();
final double height = getHeight();
polygon.getPoints().addAll(new Double[] {
0.0, 0.0,
width - getOffset(), 0.0,
width, height / 2,
width - getOffset(), height,
0.0, height});
setClip(polygon);
}
};
}
private JFXButton createLastButton(TreeItem temp, TreeItem parent) {
return new JFXButton(temp.getValue().toString()) {
private boolean noParent = parent == null;
{
setPadding(new Insets(getOffset(), getOffset(), getOffset(), (noParent? 1 : 2) * getOffset()));
setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));
}
@Override
protected void layoutChildren() {
super.layoutChildren();
double width = getWidth();
Polygon polygon = new Polygon();
final double height = getHeight();
polygon.getPoints().addAll(new Double[] {
0.0, 0.0,
width, 0.0,
width, height,
0.0, height,
noParent ? 0 : getOffset(), noParent ? 0 : height / 2});
setClip(polygon);
}
};
}
public PointingHeroIcon(ObservableEntity oe) {
super(oe);
shape = new Polygon(
0, -200, -120, 200, 120, 200
);
shape.fillProperty().bind(getPlayerColor());
ObjectBinding<Vector> angRotVector = oe.getPropertyBinding(Vector.class, "CBodyComponent.m_angRotation", null);
DoubleBinding angRot = Bindings.createDoubleBinding(() -> (double) angRotVector.get().getElement(1), angRotVector);
IntegerBinding angDiff = Bindings.selectInteger(oe.getPropertyBinding(Integer.class, "m_anglediff", 0));
shape.translateXProperty().bind(getMapX());
shape.translateYProperty().bind(getMapY());
shape.rotateProperty().bind(getBaseAngle().add(angRot).add(angDiff));
}
private void displayTriangles(int order, Point2D p1,
Point2D p2, Point2D p3) {
if (order == 0) {
// Draw a triangle to connect three points
Polygon triangle = new Polygon();
triangle.getPoints().addAll(p1.getX(), p1.getY(), p2.getX(),
p2.getY(), p3.getX(), p3.getY());
triangle.setStroke(Color.BLACK);
triangle.setFill(Color.WHITE);
this.getChildren().add(triangle);
}
else {
//Get the midpoint on each edge in the triangle
Point2D p12= p1.midpoint(p2);
Point2D p23= p2.midpoint(p3);
Point2D p31= p3.midpoint(p1);
// Recursively display three triangles
displayTriangles(order - 1, p1, p12, p31);
displayTriangles(order - 1, p12, p2, p23);
displayTriangles(order - 1, p31, p23, p3);
}
}
private void displayTriangles(int order, Point2D p1,
Point2D p2, Point2D p3) {
if (order == 0) {
// Draw a triangle to connect three points
Polygon triangle = new Polygon();
triangle.getPoints().addAll(p1.getX(), p1.getY(), p2.getX(),
p2.getY(), p3.getX(), p3.getY());
triangle.setStroke(Color.BLACK);
triangle.setFill(Color.BLACK);
this.getChildren().add(triangle);
}
else {
//Get the midpoint on each edge in the triangle
Point2D p12= p1.midpoint(p2);
Point2D p23= p2.midpoint(p3);
Point2D p31= p3.midpoint(p1);
// Recursively display three triangles
displayTriangles(order - 1, p1, p12, p31);
displayTriangles(order - 1, p12, p2, p23);
displayTriangles(order - 1, p31, p23, p3);
}
}
@Override
public void copyFrom(Object src) {
if (!(src instanceof PolygonItem)) {
return;
}
getPoints().setAll(Polygon.class.cast(src).getPoints());
}
private static Pane getDemoPane() {
final Rectangle rect = new Rectangle(-130, -40, 80, 80);
rect.setFill(Color.BLUE);
final Circle circle = new Circle(0, 0, 40);
circle.setFill(Color.GREEN);
final Polygon triangle = new Polygon(60, -40, 120, 0, 50, 40);
triangle.setFill(Color.RED);
final Group group = new Group(rect, circle, triangle);
group.setTranslateX(300);
group.setTranslateY(200);
final RotateTransition rotateTransition = new RotateTransition(Duration.millis(4000), group);
rotateTransition.setByAngle(3.0 * 360);
rotateTransition.setCycleCount(Animation.INDEFINITE);
rotateTransition.setAutoReverse(true);
rotateTransition.play();
final RotateTransition rotateTransition1 = new RotateTransition(Duration.millis(1000), rect);
rotateTransition1.setByAngle(360);
rotateTransition1.setCycleCount(Animation.INDEFINITE);
rotateTransition1.setAutoReverse(false);
rotateTransition1.play();
final RotateTransition rotateTransition2 = new RotateTransition(Duration.millis(1000), triangle);
rotateTransition2.setByAngle(360);
rotateTransition2.setCycleCount(Animation.INDEFINITE);
rotateTransition2.setAutoReverse(false);
rotateTransition2.play();
group.setManaged(true);
HBox.setHgrow(group, Priority.ALWAYS);
final HBox box = new HBox(group);
VBox.setVgrow(box, Priority.ALWAYS);
box.setId("demoPane");
return box;
}
public TranslateSample() {
super(230, 220);
//create 2 rectangles with different color
Rectangle rect1 = new Rectangle(90, 90, Color.web("#ed4b00", 0.75));
Rectangle rect2 = new Rectangle(90, 90, Color.web("#ed4b00", 0.5));
//translate second one
rect2.setTranslateX(140);
// rectangle with adjustable translate
Rectangle rect3 = new Rectangle(40, 130, 60, 60);
rect3.setFill(Color.DODGERBLUE);
rect3.setTranslateX(20);
rect3.setTranslateY(10);
//show the rectangles
getChildren().addAll(rect2, rect1, rect3);
// REMOVE ME
setControls(
new SimplePropertySheet.PropDesc("Translate X", rect3.translateXProperty(), 0d, 50d),
new SimplePropertySheet.PropDesc("Translate Y", rect3.translateYProperty(), 0d, 50d)
);
// END REMOVE ME
//create arrow
Polygon polygon = createArrow();
polygon.setLayoutX(110);
polygon.setLayoutY(30);
polygon.setRotate(90);
getChildren().addAll(polygon);
}
public static Polygon createArrow() {
Polygon polygon = new Polygon(new double[]{
7.5, 0,
15, 15,
10, 15,
10, 30,
5, 30,
5, 15,
0, 15
});
polygon.setFill(Color.web("#ff0900"));
return polygon;
}
public static Polygon createArrow() {
Polygon polygon = new Polygon(new double[]{
7.5, 0,
15, 15,
10, 15,
10, 30,
5, 30,
5, 15,
0, 15
});
polygon.setFill(Color.web("#ff0900"));
return polygon;
}
public RotateSample() {
super(220, 270);
//create 2 rectangles
Rectangle rect1 = new Rectangle(90, 90, Color.web("#ed4b00", 0.75));
Rectangle rect2 = new Rectangle(90, 90, Color.web("#ed4b00", 0.5));
//rotate the second one
rect2.getTransforms().add(new Rotate(135, 90, 90)); // parameters are angle, pivotX and pivotY
// rectangle with adjustable rotate
Rectangle rect3 = new Rectangle(40, 180, 60, 60);
rect3.setFill(Color.DODGERBLUE);
rect3.setArcWidth(10);
rect3.setArcHeight(10);
rect3.setRotate(45);
//show the rectangles
getChildren().addAll(rect2, rect1, rect3);
// REMOVE ME
setControls(
new SimplePropertySheet.PropDesc("Rotate", rect3.rotateProperty(), 0d, 360d)
);
// END REMOVE ME
//create arrow
Polygon polygon = createArrow();
polygon.setLayoutX(110);
polygon.setLayoutY(15);
polygon.setRotate(135);
getChildren().addAll(polygon);
}
public static Polygon createArrow() {
Polygon polygon = new Polygon(new double[]{
7.5, 0,
15, 15,
10, 15,
10, 30,
5, 30,
5, 15,
0, 15
});
polygon.setFill(Color.web("#ff0900"));
return polygon;
}
public static Polygon createArrow() {
Polygon polygon = new Polygon(new double[]{
7.5, 0,
15, 15,
10, 15,
10, 30,
5, 30,
5, 15,
0, 15
});
polygon.setFill(Color.web("#ff0900"));
return polygon;
}