Java 画布不能画平滑的线条
在javafx画布中进行徒手绘制时,我无法获得动画化的线条。 下面是代码Java 画布不能画平滑的线条,java,javafx-2,javafx,antialiasing,Java,Javafx 2,Javafx,Antialiasing,在javafx画布中进行徒手绘制时,我无法获得动画化的线条。 下面是代码 import javafx.application.*; import javafx.event.*; import javafx.scene.*; import javafx.scene.canvas.*; import javafx.scene.control.*; import javafx.scene.input.*; import javafx.scene.shape.*; import javafx.stage
import javafx.application.*;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.scene.shape.*;
import javafx.stage.*;
public class Test2 extends Application {
GraphicsContext gc;
public static void main(String[] args) { launch(args); }
private class MouseDragged implements EventHandler<MouseEvent> {
public void handle( MouseEvent e ) {
gc.lineTo( e.getX(), e.getY() );
gc.stroke();
}
}
private class MousePressed implements EventHandler<MouseEvent> {
public void handle( MouseEvent e ) {
gc.moveTo( e.getX(), e.getY() );
}
}
@Override
public void start(Stage stage) {
Canvas canvas = new Canvas(500, 500);
canvas.setOnMouseDragged( new MouseDragged() );
canvas.setOnMousePressed( new MousePressed() );
gc = canvas.getGraphicsContext2D();
gc.setLineCap( StrokeLineCap.ROUND );
gc.setLineJoin( StrokeLineJoin.ROUND );
gc.setLineWidth( 0.1 );
Group root = new Group(canvas);
Scene scene = new Scene(root);
stage.setTitle("Test2");
stage.setScene(scene);
stage.show();
}
}
如何为画布中的图形上下文提供渲染点击?尝试将此效果添加到
GraphicsContext
:
BoxBlur blur = new BoxBlur();
blur.setWidth(1);
blur.setHeight(1);
blur.setIterations(1);
gc.setEffect(blur);
因此(例如)您的start
方法现在看起来如下:
@Override
public void start(Stage stage) {
Canvas canvas = new Canvas(500, 500);
canvas.setOnMouseDragged( new MouseDragged() );
canvas.setOnMousePressed( new MousePressed() );
gc = canvas.getGraphicsContext2D();
gc.setLineCap( StrokeLineCap.ROUND );
gc.setLineJoin( StrokeLineJoin.ROUND );
gc.setLineWidth( 1 );
BoxBlur blur = new BoxBlur();
blur.setWidth(1);
blur.setHeight(1);
blur.setIterations(1);
gc.setEffect(blur);
Group root = new Group(canvas);
Scene scene = new Scene(root);
stage.setTitle("Test2");
stage.setScene(scene);
stage.show();
}
它并不完全完美。。。但到目前为止我发现的最好的事情是。记录针对旧JavaFX问题跟踪链接的功能请求已经失效。可以记录功能请求(我认为),但是如果您在记录之前先在中讨论,您可能会更幸运地实现功能请求。请注意,这里的实际问题可能是多次绘制相同的点,这会使抗锯齿线出现锯齿。参见相关问题:不错的选择。但出于这个目的,我想我会坚持swing一段时间。没有BuffereImage的灵活性,我几乎做不到什么。
@Override
public void start(Stage stage) {
Canvas canvas = new Canvas(500, 500);
canvas.setOnMouseDragged( new MouseDragged() );
canvas.setOnMousePressed( new MousePressed() );
gc = canvas.getGraphicsContext2D();
gc.setLineCap( StrokeLineCap.ROUND );
gc.setLineJoin( StrokeLineJoin.ROUND );
gc.setLineWidth( 1 );
BoxBlur blur = new BoxBlur();
blur.setWidth(1);
blur.setHeight(1);
blur.setIterations(1);
gc.setEffect(blur);
Group root = new Group(canvas);
Scene scene = new Scene(root);
stage.setTitle("Test2");
stage.setScene(scene);
stage.show();
}