首页 > 代码库 > 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 }
View Code

JavaFX一点学习