假设我有一些形状:
Shape s1 = new Rectangle(10, 10);
Shape s2 = new Circle(10);
等。 我想在画布上画它们。在Swing中,可以通过Graphics2D.draw(Shape shape)方法,但我在JavaFX GraphicsContext中看不到相同的东西。在JavaFX中有这样的东西吗?
答案 0 :(得分:4)
我不完全确定可以按照您期望的方式将对象直接绘制到画布上,而是直接将它绘制到舞台节点上,例如来自here的示例:
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);
}
}
然而,canvas API通常是通过方法调用绘制形状,矩形等的方式。所以回顾一下,您甚至可以将矩形对象绘制到其他节点上,例如HBOX:
HBox root = new HBox(rectangle);
但是将它绘制到画布上通常是这样做的:
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);
最好的选择是开发方法,将对象传递给然后使用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);
return gc;
}