You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX绘图程序Line线条绘制显示效果与预期不符问题咨询

直线绘制逻辑问题排查与修复

你当前的线条绘制逻辑存在明显错误,是显示效果不符合预期的核心原因,具体问题和修复方法如下:

已发现的错误点

  • 你配置的宽高参数完全没有生效:代码里把读取textWidth、textHeight输入值的逻辑注释掉了,绘制直线时完全没有用到你设置的32宽高参数,自然得不到预期尺寸的线条
  • 直线终点坐标逻辑错误:现在写死了终点是点击坐标的1/2(e.getX()/2、e.getY()/2),所有直线都会从点击位置往画布左上角倾斜,长度完全由点击位置决定,和你预期的固定尺寸没有关联
  • 虚线样式没有重置:切换到虚线后调用了setLineDashes(10),切回实线时没有清空该配置,会导致后续所有绘制哪怕选了实线也保留虚线样式
  • 声明的Line对象属于冗余代码:你只是用它临时存储了下坐标,完全没有用到JavaFX Line形状的渲染能力,完全可以删掉

修复代码示例

如果要实现点击画布后绘制符合设置宽高的直线,可按如下逻辑修改鼠标点击事件代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:15:03