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

JavaFX绘图程序虚线描边粗细调整异常问题求助

问题原因

你的问题来自两个代码逻辑问题:

  1. 你只在实线分支调用了gc.setLineWidth(strokeWidth),虚线分支完全没设置描边宽度,导致虚线模式下描边宽度一直是初始化的默认值1
  2. 你注释的gc.setLineDashes(strokeWidth)写法会把虚线段长度和线宽绑定为1:1,调整线宽时虚线段长度同步变化,才会出现段数改变的情况

解决方案

你可以根据自己需要的虚线效果二选一:

  • 方案1:固定虚线段和间隔的比例(视觉上虚线样式和线宽等比例放大,段数不变)
    如果你希望线越粗,虚线的每一段和间隔也同步变粗,保持整体虚线疏密不变,只需要统一设置描边宽度,同时按比例设置dash参数即可。
  • 方案2:固定虚线段和间隔的实际像素长度
    如果你希望不管线多粗,每段虚线和间隔的长度都是固定像素值,只需要把dash参数设为固定值,同时统一设置描边宽度即可。

代码修改示例

把你鼠标点击事件里的描边设置逻辑改成如下代码即可:

gc.setStroke(cpLine.getValue());
// 把setLineWidth放到分支外面,实线虚线都生效
gc.setLineWidth(strokeWidth);
if(choiceBox.getSelectionModel().isSelected(0)){
    // 实线模式清空dash设置,避免切换时残留虚线样式
    gc.setLineDashes(null);
}
else if(choiceBox.getSelectionModel().isSelected(1)){
    gc.setLineDashOffset(10);
    // 方案1写法:比例模式,每段虚线长是2倍线宽,间隔是1倍线宽,段数固定
    gc.setLineDashes(strokeWidth*2, strokeWidth);
    // 方案2写法:固定像素模式,每段虚线长10px,间隔5px,段数固定
    // gc.setLineDashes(10, 5);
}
gc.setFill(cpFill.getValue());
// 剩余原有绘制逻辑保持不变

内容的提问来源于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 05:36:04