JavaFX绘图程序Line线条绘制显示效果与预期不符问题咨询
直线绘制逻辑问题排查与修复
你当前的线条绘制逻辑存在明显错误,是显示效果不符合预期的核心原因,具体问题和修复方法如下:
已发现的错误点
- 你配置的宽高参数完全没有生效:代码里把读取
textWidth、textHeight输入值的逻辑注释掉了,绘制直线时完全没有用到你设置的32宽高参数,自然得不到预期尺寸的线条 - 直线终点坐标逻辑错误:现在写死了终点是点击坐标的1/2(
e.getX()/2、e.getY()/2),所有直线都会从点击位置往画布左上角倾斜,长度完全由点击位置决定,和你预期的固定尺寸没有关联 - 虚线样式没有重置:切换到虚线后调用了
setLineDashes(10),切回实线时没有清空该配置,会导致后续所有绘制哪怕选了实线也保留虚线样式 - 声明的
Line对象属于冗余代码:你只是用它临时存储了下坐标,完全没有用到JavaFXLine形状的渲染能力,完全可以删掉
修复代码示例
如果要实现点击画布后绘制符合设置宽高的直线,可按如下逻辑修改鼠标点击事件代码:
canvas.setOnMouseClicked(e -> { if (linebtn.isSelected()) { // 读取所有配置参数 double widthSize = Double.parseDouble(textWidth.getText()); double heightSize = Double.parseDouble(textHeight.getText()); double strokeWidth = Double.parseDouble(contouring.getText()); gc.setStroke(cpLine.getValue()); gc.setFill(cpFill.getValue()); gc.setLineWidth(strokeWidth); // 先清空之前的虚线配置 gc.setLineDashes((double[]) null); // 处理描边类型 if (choiceBox.getSelectionModel().isSelected(1)) { gc.setLineDashes(10); } // 按宽高设置直线终点,这里示例是向右下方偏移对应宽高,可按需调整方向逻辑 double startX = e.getX(); double startY = e.getY(); double endX = startX + widthSize; double endY = startY + heightSize; gc.strokeLine(startX, startY, endX, endY); } });
如果需要实现拖拽绘制自定义长度直线的效果,额外监听MousePressed和MouseReleased事件即可:按下时记录起点坐标,松开时记录终点坐标再执行绘制。
内容的提问来源于stack exchange,提问作者Mohammed Hamdoon
相关产品推荐
相关产品推荐

