【发布时间】:2014-11-18 12:30:03
【问题描述】:
我正在使用下面的代码在 JavaFX 画布上绘制垂直线。不知何故,最后一行(最后 10%)的不透明度较低。我没有更改任何选项(对 gc 的转换/影响)。我附上截图供参考,有什么想法吗?
public class ChartPane extends StackPane {
Canvas canvas;
public ChartPane() {
setStyle("-fx-background-color: white;");
canvas = new Canvas(getWidth(), getHeight());
getChildren().add(canvas);
widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
canvas.setWidth(newValue.intValue());
}
});
heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
canvas.setHeight(newValue.intValue());
}
});
}
@Override
protected void layoutChildren() {
super.layoutChildren();
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.save();
gc.clearRect(0, 0, getWidth(), getHeight());
System.out.println(getWidth() + ", " + getHeight());
// vertical lines
gc.setStroke(Color.BLUE);
gc.setLineWidth(0.1);
gc.beginPath();
for(int i = 0 ; i < getWidth() ; i+=30){
gc.moveTo(i, 0);
gc.lineTo(i, getHeight() - (getHeight()%30));
gc.stroke();
}
// horizontal lines
gc.beginPath();
gc.setStroke(Color.RED);
for(int i = 30 ; i < getHeight() ; i+=30){
gc.moveTo(30, i);
gc.lineTo(getWidth(), i);
gc.stroke();
}
//gc.restore();
}
}
【问题讨论】:
-
查看将 Canvas 添加为子元素的位置会很有帮助。 Canvas 的任何父元素都可以引入我们在屏幕截图中看到的效果..
-
已编辑问题,请检查。也可以将 gc.stroke() 放在笔画之外,这样我就可以准备路径并只调用一次 stroke() 吗?现在它确实绘制但不是在 setStroke() 方法中指定的颜色。
标签: javafx javafx-8 graphicscontext