假设我有一些形状,例如:
Shape s1 = new Rectangle(10, 10);
Shape s2 = new Circle(10);
Run Code Online (Sandbox Code Playgroud)
等等。我想在画布上绘制它们。在 Swing 中,可以通过 Graphics2D.draw(Shape shape) 方法,但我在 JavaFX GraphicsContext 中看不到等效项。JavaFX 中有这样的东西吗?
我不完全确定是否可以按照您期望的方式将对象直接绘制到画布上,而是将其直接绘制到舞台节点上,例如此处的示例:
package javafx8_shape;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
/**
*
* @web java-buddy.blogspot.com
*/
public class JavaFX8_Shape extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 500, 500, Color.BLACK);
//Filled rectangle
Rectangle rect1 = new Rectangle(10, 10, 200, 200);
rect1.setFill(Color.BLUE);
//Transparent rectangle with Stroke
Rectangle rect2 = new Rectangle(60, 60, 200, 200);
rect2.setFill(Color.TRANSPARENT);
rect2.setStroke(Color.RED);
rect2.setStrokeWidth(10);
//Rectangle with Stroke, no Fill color specified
Rectangle rect3 = new Rectangle(110, 110, 200, 200);
rect3.setStroke(Color.GREEN);
rect3.setStrokeWidth(10);
root.getChildren().addAll(rect1, rect2, rect3);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,画布 API 通常是您通过方法调用绘制形状、矩形等的方式。所以回顾一下,您甚至可以将矩形对象绘制到其他节点上,例如 HBOX:
HBox root = new HBox(rectangle);
Run Code Online (Sandbox Code Playgroud)
但是将它绘制到画布上通常是这样完成的:
gc.setFill(Color.WHITESMOKE);
gc.fillRect(gc.getCanvas().getLayoutX(),
gc.getCanvas().getLayoutY(),
gc.getCanvas().getWidth(),
gc.getCanvas().getHeight());
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLUE);
Run Code Online (Sandbox Code Playgroud)
最好的选择是开发方法,将对象传递给这些方法,然后使用 API 将对象的尺寸绘制到画布上......
private void drawRectangle(GraphicsContext gc,Rectangle rect){
gc.setFill(Color.WHITESMOKE);
gc.fillRect(rect.getX(),
rect.getY(),
rect.getWidth(),
rect.getHeight());
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLUE);
}
Run Code Online (Sandbox Code Playgroud)