在JavaFX画布上绘制形状

时间:2016-11-21 21:45:26

标签: java javafx

假设我有一些形状:

Shape s1 = new Rectangle(10, 10);
Shape s2 = new Circle(10);

等。 我想在画布上画它们。在Swing中,可以通过Graphics2D.draw(Shape shape)方法,但我在JavaFX GraphicsContext中看不到相同的东西。在JavaFX中有这样的东西吗?

1 个答案:

答案 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;
}