JavaFX一點學習
阿新 • • 發佈:2017-06-05
矩形區域 非循環 @override die getch ans 循環 close div
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.*;View Code8 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一點學習