Javafx 裁剪区域设定行程(颜色:黑色); croppedArea.SetonMouseCentered(e->onMouseCentered(e,“croppedArea”); adjustRectangleProperties(起始点X、起始点Y、currentEndingPointX、currentEndingPointY、, 种植区); } } } 公共空心几何图元选择(字符串形状){ if(tempShape==“铅笔”){ shape=“铅笔”; 画布=新画布(); gc=canvas.getGraphicsContext2D(); //gc.setFill(颜色为浅灰色); gc.设定行程(颜色为黑色); gc.设置线宽(5); canvas.setLayoutX(起始点X); canvas.setLayoutY(startingPointY); setWidth(crappedArea.getWidth()); canvas.setHeight(crappedArea.getHeight()); System.out.println(“canvasAdded”); group.getChildren().add(画布); } } MouseEvent事件中的公共无效{ 如果(dragStatus==1){ 如果(形状=“裁剪区域”){ 如果(croppedArea.getHeight()>0&&croppedArea.getWidth()>0){ pencilBtn.setLayoutX(数学最大值(起始点X,当前终止点X)+5); pencilBtn.setLayoutY(数学最大值(起始点,当前结束点)-120); rootPane.getChildren().add(pencilBtn); dragStatus=0; } } BuffereImage=robot.createScreenCapture(新java.awt.Rectangle((int)startingPointX,(int)startingPointY, (int)crappedArea.getWidth(),(int)crappedArea.getHeight(); } } void adjustRectangleProperties(双起点X、双起点Y、双电流终点X、, 双电流端点,矩形给定矩形){ 给定矩形.setX(起始点x); givenRectangle.setY(startingPointY); 给定Rectangle.setWidth(currentEndingPointX-startingPointX); 给定矩形设置高度(currentEndingPointY-startingPointY); if(givenRectangle.getWidth()
`请您发布整个类别代码(包括字段、导入等)。将更容易重新创建。@PrzemekKrysztofiak我已将整个类代码与导入和变量放在一起。我相信我可以提供帮助,但恐怕您需要提供。分析提供的代码对我来说太费劲了。如果您决定创建mcve,请告诉我。@PrzemekKrysztofiak我已经尝试过了,请告诉我check@PrzemekKrysztofiak现在请检查一下。代码正在使用最小代码运行。但是免费的绘图不是绘图。请发布整个类代码(包括字段、导入等)。将更容易重新创建。@PrzemekKrysztofiak我已将整个类代码与导入和变量放在一起。我相信我可以提供帮助,但恐怕您需要提供。分析提供的代码对我来说太费劲了。如果您决定创建mcve,请告诉我。@PrzemekKrysztofiak我已经尝试过了,请告诉我check@PrzemekKrysztofiak现在请检查一下。代码正在使用最小代码运行。但自由绘画不是绘画Javafx 裁剪区域设定行程(颜色:黑色); croppedArea.SetonMouseCentered(e->onMouseCentered(e,“croppedArea”); adjustRectangleProperties(起始点X、起始点Y、currentEndingPointX、currentEndingPointY、, 种植区); } } } 公共空心几何图元选择(字符串形状){ if(tempShape==“铅笔”){ shape=“铅笔”; 画布=新画布(); gc=canvas.getGraphicsContext2D(); //gc.setFill(颜色为浅灰色); gc.设定行程(颜色为黑色); gc.设置线宽(5); canvas.setLayoutX(起始点X); canvas.setLayoutY(startingPointY); setWidth(crappedArea.getWidth()); canvas.setHeight(crappedArea.getHeight()); System.out.println(“canvasAdded”); group.getChildren().add(画布); } } MouseEvent事件中的公共无效{ 如果(dragStatus==1){ 如果(形状=“裁剪区域”){ 如果(croppedArea.getHeight()>0&&croppedArea.getWidth()>0){ pencilBtn.setLayoutX(数学最大值(起始点X,当前终止点X)+5); pencilBtn.setLayoutY(数学最大值(起始点,当前结束点)-120); rootPane.getChildren().add(pencilBtn); dragStatus=0; } } BuffereImage=robot.createScreenCapture(新java.awt.Rectangle((int)startingPointX,(int)startingPointY, (int)crappedArea.getWidth(),(int)crappedArea.getHeight(); } } void adjustRectangleProperties(双起点X、双起点Y、双电流终点X、, 双电流端点,矩形给定矩形){ 给定矩形.setX(起始点x); givenRectangle.setY(startingPointY); 给定Rectangle.setWidth(currentEndingPointX-startingPointX); 给定矩形设置高度(currentEndingPointY-startingPointY); if(givenRectangle.getWidth(),javafx,paint,Javafx,Paint,`请您发布整个类别代码(包括字段、导入等)。将更容易重新创建。@PrzemekKrysztofiak我已将整个类代码与导入和变量放在一起。我相信我可以提供帮助,但恐怕您需要提供。分析提供的代码对我来说太费劲了。如果您决定创建mcve,请告诉我。@PrzemekKrysztofiak我已经尝试过了,请告诉我check@PrzemekKrysztofiak现在请检查一下。代码正在使用最小代码运行。但是免费的绘图不是绘图。请发布整个类代码(包括字段、导入等)。将更容易重新创建。@PrzemekKrys
package application;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Point2D;
import javafx.scene.Cursor;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.Rectangle;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class Main extends Application {
int dragStatus = 0;
double startingPointX;
double startingPointY;
double currentEndingPointX;
double currentEndingPointY;
BufferedImage bufferedImage;
Robot robot;
ImageView imageView;
Button pencilBtn;
Image image;
Pane rootPane;
HBox pictureRegion;
Scene scene;
Rectangle croppedArea;
Canvas canvas;
GraphicsContext gc;
WritableImage writableImage;
Group group = new Group();
Line line;
LineTo lineTo;
String shape;
Boolean canvasAdded;
@Override
public void start(Stage primaryStage) {
try {
int sleepTime = 120;
Thread.sleep(sleepTime);
pencilBtn = createButton("save.png");
pictureRegion = new HBox();
rootPane = new Pane();
scene = new Scene(rootPane);
robot = new Robot();
java.awt.Rectangle capture = new java.awt.Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
bufferedImage = robot.createScreenCapture(capture);
image = ConvertBufferedToJavaFXImage.convertToFxImage(bufferedImage);
pencilBtn.setOnAction(e -> geometrySelection("pencil"));
croppedArea = new Rectangle();
if(canvas != null) {
canvas.setOnMousePressed(e -> onMousePressed(e));
canvas.setOnMousePressed(e -> onMouseDragged(e));
}
imageView = new ImageView(image);
scene.setOnMouseEntered(e -> onMouseEntered(e, "scene"));
scene.setOnMousePressed(e -> onMousePressed(e));
scene.setOnMouseReleased(e -> onMouseReleased(e));
scene.setOnMouseDragged(e -> onMouseDragged(e));
pictureRegion.getChildren().add(imageView);
rootPane.getChildren().add(pictureRegion);
rootPane.getChildren().add(group);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setMaximized(true);
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void onMouseEntered(MouseEvent ev, String nodeType) {
if (nodeType == "scene") {
scene.setCursor(Cursor.CROSSHAIR);
} else if (nodeType == "croppedArea") {
croppedArea.setCursor(Cursor.TEXT);
//croppedArea.setOnMousePressed(e -> onMousePressed(e));
} else if (nodeType == "btn") {
pencilBtn.setCursor(Cursor.HAND);
}
}
public void onMousePressed(MouseEvent event) {
if ((startingPointX < event.getX() && event.getX() < currentEndingPointX)
&& (startingPointY < event.getY() && event.getY() < currentEndingPointY)) {
if(shape == "pencil") {
lineTo = new LineTo();
System.out.println("lineTo1");
gc.beginPath();
gc.lineTo(event.getX(), event.getY());
gc.stroke();
}
} else {
shape = "croppedArea";
rootPane.getChildren().remove(canvas);
group.getChildren().clear();
startingPointX = event.getX();
startingPointY = event.getY();
group.getChildren().add(croppedArea);
}
}
public void onMouseDragged(MouseEvent event) {
dragStatus = 1;
if (dragStatus == 1) {
// if((startingPointX < event.getX() && event.getX() < currentEndingPointX)
// && (startingPointY < event.getY() && event.getY() < currentEndingPointY)) {
if(shape == "pencil") {
System.out.println("lineTo1");
gc.lineTo(event.getX(), event.getY());
gc.stroke();
}
else {
currentEndingPointX = event.getX();
currentEndingPointY = event.getY();
rootPane.getChildren().remove(pencilBtn);
croppedArea.setFill(Color.TRANSPARENT);
croppedArea.setStroke(Color.BLACK);
croppedArea.setOnMouseEntered(e -> onMouseEntered(e, "croppedArea"));
adjustRectangleProperties(startingPointX, startingPointY, currentEndingPointX, currentEndingPointY,
croppedArea);
}
}
}
public void geometrySelection(String tempShape) {
if(tempShape == "pencil") {
shape = "pencil";
canvas = new Canvas();
gc = canvas.getGraphicsContext2D();
//gc.setFill(Color.LIGHTGRAY);
gc.setStroke(Color.BLACK);
gc.setLineWidth(5);
canvas.setLayoutX(startingPointX);
canvas.setLayoutY(startingPointY);
canvas.setWidth(croppedArea.getWidth());
canvas.setHeight(croppedArea.getHeight());
System.out.println("canvasAdded");
group.getChildren().add(canvas);
}
}
public void onMouseReleased(MouseEvent event) {
if(dragStatus == 1) {
if(shape == "croppedArea") {
if (croppedArea.getHeight() > 0 && croppedArea.getWidth() > 0) {
pencilBtn.setLayoutX(Math.max(startingPointX, currentEndingPointX) + 5);
pencilBtn.setLayoutY(Math.max(startingPointY, currentEndingPointY) - 120);
rootPane.getChildren().add(pencilBtn);
dragStatus = 0;
}
}
bufferedImage = robot.createScreenCapture(new java.awt.Rectangle((int) startingPointX, (int) startingPointY,
(int) croppedArea.getWidth(), (int) croppedArea.getHeight()));
}
}
void adjustRectangleProperties(Double startingPointX, Double startingPointY, Double currentEndingPointX,
Double currentEndingPointY, Rectangle givenRectangle) {
givenRectangle.setX(startingPointX);
givenRectangle.setY(startingPointY);
givenRectangle.setWidth(currentEndingPointX - startingPointX);
givenRectangle.setHeight(currentEndingPointY - startingPointY);
if (givenRectangle.getWidth() < 0) {
givenRectangle.setWidth(-givenRectangle.getWidth());
givenRectangle.setX(givenRectangle.getX() - givenRectangle.getWidth());
}
if (givenRectangle.getHeight() < 0) {
givenRectangle.setHeight(-givenRectangle.getHeight());
givenRectangle.setY(givenRectangle.getY() - givenRectangle.getHeight());
}
}
public Button createButton(String imageName) throws FileNotFoundException {
FileInputStream iconFile = new FileInputStream(imageName);
Image iconImage = new Image(iconFile);
Button button = new Button();
button.setGraphic(new ImageView(iconImage));
button.setMaxSize(20, 20);
button.setPadding(Insets.EMPTY);
return button;
}
public static void main(String[] args) {
launch(args);
}
}