2016-09-10 8 views
8

JavaFXのキャンバスに描かれた線は、鮮明な最小限のエッジを持っています。JavaFX FXMLベースのアプリケーションの線と曲線の鮮明なエッジ

たとえば、JavaFX Canvas documentationからデモコードを取得しました。ここ は、デモアプリケーションからの結果である:

enter image description here

そしてここでは、FXMLベースのアプリケーションからの結果である:

enter image description here

キャンバスコードから手動で作成されています。それを描いている瞬間にはすでにステージに入っています。

ぼかし効果、ラウンドラインキャップとラウンドライン結合は役立ちません。

gcProgress.setEffect(blur); 
gcProgress.setStroke(Color.ROYALBLUE); 
gcProgress.setLineCap(StrokeLineCap.ROUND); 
gcProgress.setLineJoin(StrokeLineJoin.ROUND); 
gcProgress.setLineWidth(3); 

PSフォントと同じ問題があるかもしれません。アンチエイリアスは機能していないようです。 WindowsとMacでテスト済み。

+1

追加してもらえますか?あなたの "fxmlベースのソリューション"の問題は、あなたが詳細を投稿していないので不明です... – fabian

+0

@fabian、私は別のスレッド(実際にはprogressProperty()の変更からキャンバスに描画していたためですリスナー)。 Platform.runLaterでも役に立たなかった。 – artplastika

答えて

1

あなたの要素にsmooth="true"を設定する必要があります。 SceneBuilder(V8.2.0)を使用する場合ARC->プロパティ - > "スムーズ" チェックボックス:


これ

は、シーンビルダで行うことができます。

結果:ここで

は、生成されたFXMLファイルから抜粋されて:あなたは[MCVE]

<Arc fill="WHITE" layoutX="71.0" layoutY="61.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeType="INSIDE" strokeWidth="4.0" type="ROUND" /> 
<Arc fill="WHITE" layoutX="138.0" layoutY="61.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeType="INSIDE" strokeWidth="4.0" type="CHORD" /> 
<Arc fill="WHITE" layoutX="201.0" layoutY="61.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeWidth="4.0" /> 

<Arc fill="WHITE" smooth="false" layoutX="71.0" layoutY="133.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeType="INSIDE" strokeWidth="4.0" type="ROUND" /> 
<Arc fill="WHITE" smooth="false" layoutX="138.0" layoutY="133.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeType="INSIDE" strokeWidth="4.0" type="CHORD" /> 
<Arc fill="WHITE" smooth="false" layoutX="201.0" layoutY="133.0" length="270.0" radiusX="30.0" radiusY="30.0" startAngle="45.0" stroke="#1500ff" strokeLineCap="ROUND" strokeWidth="4.0" /> 
+0

私はSceneBuilderを使用しません。私はキャンバス上に円弧を描画しています:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html#strokeArc-double-double- double-double-double-double-javafx.scene.shape.ArcType- – artplastika