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
分享到:
相关推荐
完整的桌面视频剪切工具源码。 因为内置了ffmpeg导致项目体积比较大,后期修复,可以加我免费获取。
javaFX canvas api 之 画布创建模拟图层切换的例子 demo
javaFX canvas用法交互的小例子程序 挤压后idea可以打开并运行
JAVAFX canvas实时画图sin函数 代码抽取 primaryStage.setTitle("Drawing Operations Test"); Group root = new Group(); Canvas canvas = new Canvas(1000, 800); GraphicsContext gc = canvas....
javafx_canvas
Learn the Fundamentals of JavaFX 8 from Programming Guru Herb Schildt Introducing JavaFX 8 Programming provides a fast-paced, practical introduction to JavaFX, ...Chapter 9 Charts, WebView, and Canvas
该演示演示了如何使用vlcj将视频呈现到JavaFX Canvas。 新的JavaFX PixelBuffer用于避免全帧缓冲区复制,这是强烈建议使用的方法。 看: 使用PixelBuffer,本地视频缓冲区直接与JavaFX共享,从而避免了每个视频...
贝塞尔曲线 简单的 JavaFX 练习和说明如何在屏幕上绘制 2D Bezier 曲线。 去做: 设置初始手柄位置 控制动画(属性,重置)
帆布 用于从 Java 代码绘制到 Canvas 的 API
private void goDrawArc(Canvas canvas) { Log.d("liuyz", "onDraw:" + measureWidth + "x" + measureHeight); float startAngle = 0; float lineStartAngle; float sweepLineAngle; count = 0; float line...
JavaFX自定义控件该项目将展示有关如何在JavaFX中创建自定义控件的不同方法。 它将涵盖以下方法: 重新设置现有控件的样式合并现有控件扩展现有控件创建一个基于区域的自定义控件创建一个控件+基于外观的自定义控件...
Defines the core scenegraph APIs for the JavaFX UI toolkit (such as layout containers, application lifecycle, shapes, transformations, canvas, input, painting, image handling, and effects), as well as...
三国人物连连看游戏基于html5 canvas制作,点击两个相同相连三国人物进行消除操作。本游戏用html5开发,附带详细中文注释,欢迎大家交流。
Graphics2D的坐标系(画布左上角为原点(x=0,y=0),Y轴向下为正值,与JavaFx或Android,JavaScript的Canvas渲染坐标一致 ),渲染接口也都被保存下来,Graphics2D以及Android Canvas的大部分API可以在GLEx这一全局渲染类...
俄罗斯方块Online集中上机作业实现功能:本地游戏,账号登录注册,双人联机对打,排行榜技术方面涉及到了javafx图形界面,socket通信,canvas绘制。使用了Gson传递数据纯手撸,无抄袭,还有很多不完善的地方服务器是...
由于GEF框架最新版本是GEF5,主要目的平台是JavaFX,无法方便地使用Web技术上。因此,本项目采用项目的代码框架。 路线图(RoadMap) []梳理draw2d的Java类继承关系1.1 [x]放置IFigure类图1.2 [x]放置...
关于html5和RIA(silverlight,flash,JavaFx等)我不想说什么,也没有什么可说的,存在就有其存在的理由。孰优孰劣,留给事实、时间来证明的。 在html5中出现了一些新特性: canvas 元素 视频 video 和 声频audio ...
HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最...