首页 > 代码库 > JavaFX一点学习
JavaFX一点学习
Java 中的 Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写paint 方法,以便在 canvas 上执行自定义图形。
Java 使用 MouseEvent 来对鼠标进行监听。mouseClicked 在鼠标按键在组件上单击(按下并释放)时调用。mouseDragged 在鼠标按键在组件上拖动时调用。getButton() 可以用来判断按下的是哪个按键。
LinearGradient 是 Java 中两种渐变方法之一,另一种是 RadialGradient 。要创建线性渐变,应为开始点和结束点指定startX,startY,endX和endY。起点和终点坐标指定渐变模式开始和停止的位置。
这个小程序 CanvasTest 参考了部分代码,主要实现的是左键拖动涂色,右键清除。渐变因为没有弄懂api,暂时采用的是 NO_CYCLE ,即非循环渐变的形式。
1 import javafx.application.*; 2 import javafx.event.*; 3 import javafx.scene.Group; 4 import javafx.scene.Scene; 5 import javafx.scene.canvas.*; 6 import javafx.scene.input.*; 7 import javafx.scene.paint.*; 8 import javafx.scene.shape.*; 9 import javafx.stage.Stage; 10 11 public class CanvasTest extends Application { 12 private void reset(Canvas canvas, Color color) { 13 GraphicsContext gc = canvas.getGraphicsContext2D(); 14 gc.setFill(color); 15 gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); 16 } 17 18 @Override 19 public void start(Stage primaryStage) { 20 primaryStage.setTitle("拖动鼠标以涂色,右键清除"); 21 Group root = new Group(); 22 23 Rectangle rect = new Rectangle(800, 800); 24 Background(rect); 25 root.getChildren().add(rect); 26 27 final Canvas canvas = new Canvas(400, 400); 28 canvas.setTranslateX(200); 29 canvas.setTranslateY(200); 30 reset(canvas, Color.web("#003153")); 31 32 final GraphicsContext gc = canvas.getGraphicsContext2D(); 33 34 canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() { 35 @Override 36 public void handle(MouseEvent e) { 37 gc.clearRect(e.getX() - 2, e.getY() - 2, 7, 7); 38 } 39 }); 40 41 canvas.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 42 @Override 43 public void handle(MouseEvent t) { 44 if (t.getButton() == MouseButton.SECONDARY) { 45 reset(canvas, Color.web("#003153")); 46 } 47 } 48 }); 49 50 root.getChildren().add(canvas); 51 primaryStage.setScene(new Scene(root, 800, 800)); 52 primaryStage.show(); 53 } 54 55 private void Background(Rectangle rect) { 56 rect.setFill(new LinearGradient(0, 0, 1, 1, true, 57 CycleMethod.NO_CYCLE, 58 new Stop(0, Color.web("#7F0020")), 59 new Stop(1, Color.web("#CC7722")))); 60 } 61 }
JavaFX一点学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。