This example show how to draw scaled image on JavaFX canvas, on rectangle assigned by mouse pressed and released events.
Draw scaled image on JavaFX Canvas |
package javafx_drawoncanvas;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_DrawOnCanvas extends Application {
final static int CANVAS_WIDTH = 400;
final static int CANVAS_HEIGHT = 400;
double x0, y0, x1, y1;
Image image;
@Override
public void start(final Stage primaryStage) {
final Canvas canvas = new Canvas(CANVAS_WIDTH, CANVAS_HEIGHT);
final GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
initDraw(graphicsContext);
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
x0 = event.getX();
y0 = event.getY();
}
});
canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
}
});
canvas.addEventHandler(MouseEvent.MOUSE_RELEASED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
x1 = event.getX();
y1 = event.getY();
double x = (x0 > x1) ? x1 : x0;
double y = (y0 > y1) ? y1 : y0;
double w = (x0 > x1) ? x0-x1 : x1-x0;
double h = (y0 > y1) ? y0-y1 : y1-y0;
graphicsContext.drawImage(image, x, y, w, h);
}
});
Group root = new Group();
VBox vBox = new VBox();
vBox.getChildren().addAll(canvas);
root.getChildren().add(vBox);
Scene scene = new Scene(root, 400, 425);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void initDraw(GraphicsContext gc){
double canvasWidth = gc.getCanvas().getWidth();
double canvasHeight = gc.getCanvas().getHeight();
gc.setFill(Color.LIGHTGRAY);
gc.setStroke(Color.BLACK);
gc.setLineWidth(5);
gc.fill();
gc.strokeRect(
0, //x of the upper left corner
0, //y of the upper left corner
canvasWidth, //width of the rectangle
canvasHeight); //height of the rectangle
gc.setLineWidth(1);
image = new Image(getClass().getResourceAsStream("duke_44x80.png"));
}
}
No comments:
Post a Comment