JavaFX之Canvas

22 篇文章 30 订阅

  JavaFX 2.2中新增加了一个很重要而且也很常见的东西 -- Canvas。


 JavaFX中的Canvas,是继承Node的,按照继承的层级关系来看,它跟ImageView,MediaView,Parent和Shape是同

一层级的。


  因此Canvas不能直接放入Scene中,必须添加到Parent中,然后加入Scene。


  Canvas中包含了一个GraphicsContext,用来负责Canvas中的图形绘制的。其实也就是类似与Java2D的Graphics,

Graphics2D。


  而GraphicsContext不仅仅可以进行各种图形的绘制,也可以应用JavaFX的一些特效,同时也有save和restore功能,

可以保存和还原一些全局参数。


  下面我们来看看Canvas的简单的功能吧。


  新建一个类MyCanvas继承Canvas。

  

import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcType;

public class MyCanvas extends Canvas {
    private GraphicsContext gc;
	public MyCanvas(double width, double height){
		super(width, height);
		
		gc = getGraphicsContext2D();
		draw(gc);
	}
	
	public void draw(GraphicsContext gc){
	
		gc.save();
        gc.setStroke(Color.BLUE);
        gc.setLineWidth(2);                //设置线的宽度
        gc.strokeLine(0, 0, 50, 50);       //绘制直线
        gc.restore();
        
        //绘制椭圆
        gc.save();
        gc.setFill(Color.YELLOWGREEN);
        gc.strokeOval(0, 80, 50, 50);
        gc.fillOval(100, 80, 50, 50);
        gc.restore();
        
        //绘制矩形
        gc.save();
        gc.setStroke(Color.CHOCOLATE);
        gc.fillRect(0, 150, 50, 50);
        gc.strokeRect(100, 150, 50, 50);
        gc.restore();
        
        //绘制圆角矩形
        gc.save();
        gc.setFill(Color.CHOCOLATE);
        gc.fillRoundRect(0, 220, 50, 50, 15, 15);
        gc.strokeRoundRect(100, 220, 50, 50, 15, 15);
        gc.restore();
        
        //绘制扇形
        gc.save();
        gc.setStroke(Color.CHOCOLATE);
        gc.fillArc(10, 300, 30, 30, 40, 280, ArcType.OPEN);
        gc.fillArc(60, 300, 30, 30, 40, 280, ArcType.CHORD);
        gc.fillArc(110, 300, 30, 30, 40, 280, ArcType.ROUND);
        gc.strokeArc(10, 340, 30, 30, 40, 280, ArcType.OPEN);
        gc.strokeArc(60, 340, 30, 30, 40, 280, ArcType.CHORD);
        gc.strokeArc(110, 340, 30, 30, 40, 280, ArcType.ROUND);
        gc.restore();
        
        //绘制多边形
        gc.save();
        gc.setFill(Color.RED);
        gc.setStroke(Color.CHOCOLATE);
        gc.fillPolygon(new double[]{0, 40, 50, 60, 100, 70, 85, 50, 15, 30}, new double[]{440,440,400,440,440,  460,500,470,500,460}, 10);
        gc.strokePolygon(new double[]{0, 40, 50, 60, 100, 70, 85, 50, 15, 30}, new double[]{440,440,400,440,440,  460,500,470,500,460}, 10);
        gc.restore();
	}
}


   基本图形的绘制其实跟Java和Android中都很类似,就不过多描述。save和restore也在这里进行了一下简单的应

用。

  然后建立JavaFX的主类,将Canvas添加进根节点。

 

  

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainClass extends Application {
    private static final int WIDTH = 800;
	private static final int HEIGHT = 600;
	@Override
	public void start(Stage primaryStage) {
		MyCanvas mCanvas = new MyCanvas(WIDTH, HEIGHT);
		Group root = new Group();
		root.getChildren().add(mCanvas);
		Scene scene = new Scene(root, WIDTH, HEIGHT);
		
		primaryStage.setTitle("JavaFX Canvas");
		primaryStage.setScene(scene);
		primaryStage.show();
	}

	public static void main(String[] args) {
		launch(args);
	}
}


  我们来看看运行的效果:


  

  

  这些只是基本的图形绘制,当然你也可以使用applyeffect来很容易的应用一些特效。

  

  这都是需要我们自己进行灵活的运行来做出炫丽的效果。


  那么Canvas的介绍就暂时到这里了。


  转载请注明出处:http://blog.csdn.net/ml3947



  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
JavaFX CanvasJavaFX提供的一个图形绘制组件,它允许开发者在画布上进行自定义的绘制操作。通过使用Canvas,可以实现各种图形、动画和交互效果。 Canvas是一个矩形区域,可以在其中进行绘制操作。开发者可以通过获取Canvas的GraphicsContext对象,并使用该对象提供的方法进行绘制操作。GraphicsContext提供了一系列方法,如绘制线条、矩形、圆形、文本等。 使用Canvas进行绘制的基本步骤如下: 1. 创建一个Canvas对象,并设置其宽度和高度。 2. 获取Canvas的GraphicsContext对象。 3. 使用GraphicsContext提供的方法进行绘制操作,如绘制线条、矩形、圆形等。 4. 将Canvas添加到JavaFX的场景图中,以显示出来。 以下是一个简单的示例代码,演示了如何使用Canvas绘制一个矩形: ``` import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class CanvasExample extends Application { @Override public void start(Stage primaryStage) { Canvas canvas = new Canvas(400, 300); GraphicsContext gc = canvas.getGraphicsContext2D(); gc.setFill(Color.BLUE); gc.fillRect(50, 50, 200, 100); StackPane root = new StackPane(); root.getChildren().add(canvas); Scene scene = new Scene(root, 400, 300); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值