JavaFX绘图程序虚线描边粗细调整异常问题求助
问题原因
你的问题来自两个代码逻辑问题:
- 你只在实线分支调用了
gc.setLineWidth(strokeWidth),虚线分支完全没设置描边宽度,导致虚线模式下描边宽度一直是初始化的默认值1 - 你注释的
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
相关产品推荐
相关产品推荐

