2016-09-10 12 views
8

जावाफैक्स कैनवास पर खींची गई रेखाओं में तीखे किनारों के किनारों पर तेज किनारों पर तेज किनारों हैं।जावाएफएक्स एफएक्सएमएल-आधारित अनुप्रयोग

उदाहरण के लिए, मैंने 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); 

पीएस शायद यह महत्वपूर्ण है, फोंट के साथ एक ही समस्या: एंटी-एलियासिंग काम नहीं कर रहा है। विंडोज और मैक पर परीक्षण किया।

+1

आप जोड़ सकते एक [mcve]? यह स्पष्ट नहीं है कि आपके "fxml- आधारित समाधान" के साथ समस्या क्या है क्योंकि आपने कोई विवरण पोस्ट नहीं किया है ... – fabian

+0

@ फ़ैबियन, मैंने पाया क्योंकि ऐसा इसलिए है क्योंकि मैं दूसरे धागे से कैनवास पर चित्रण कर रहा था (वास्तव में प्रगतिप्रॉपर्टी() के परिवर्तन से श्रोता)। यहां तक ​​कि Platform.runLater मदद नहीं की। – artplastika

उत्तर

1

आपको अपने तत्वों पर smooth="true" सेट करने की आवश्यकता है। जब SceneBuilder (v8.2.0) का उपयोग कर Arc-> गुण> "चिकना" चेकबॉक्स:


यह भी दृश्य बिल्डर में किया जा सकता।

परिणाम:

यहाँ उत्पन्न FXML फ़ाइल से एक टुकड़ा है:

<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

मैं सीनबुल्डर का उपयोग नहीं करता, मैं कैनवास पर आर्क खींच रहा हूं: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html#strokeArc- डबल- डबल- डबल-डबल-डबल-डबल javafx.scene.shape.ArcType- – artplastika

संबंधित मुद्दे