当窗口调整大小但现有图形无效/重新绘制时,下面的代码会触发doDrawing()(请参阅图像链接)。我的理解是JavaFX处理这个问题。我错过了什么?感谢。
编辑:我发现如果我在GraphicsContext上调用clearRect,指定整个画布,它将正确重新绘制,但我认为JavaFX会识别需要重新绘制的内容。
Image of canvas not repainting correctly
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Class1 extends Application {
Canvas canvas;
public Class1() { }
@Override
public void start(Stage stage) throws Exception {
BorderPane border = new BorderPane();
canvas = new Canvas(300,300);
border.setCenter(canvas);
Scene scene = new Scene(border);
stage.setScene(scene);
stage.show();
canvas.widthProperty().bind(border.widthProperty());
canvas.heightProperty().bind(border.heightProperty());
scene.heightProperty().addListener((ObservableValue<? extends Number>
observableValue, Number number, Number number2) -> {
doDrawing();
});
scene.widthProperty().addListener((ObservableValue<? extends Number>
observableValue, Number number, Number number2) -> {
doDrawing();
});
doDrawing();
}
public void doDrawing()
{
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setStroke(Color.BLACK);
gc.strokeRect(10, 10, canvas.getWidth() - 10, canvas.getHeight() - 10);
}
}
JDK1.8.0_121 Netbeans 8.0.2 Windows 10
答案 0 :(得分:1)
这里可能存在误解。 JavaFX不会自动重绘画布中的任何内容。我改变它的大小你必须像上次更新一样再次绘制每一个。