2016-09-10 14 views
8

Các đường vẽ trên khung nền JavaFX có các cạnh nhỏ gọn sắc nét.Các cạnh sắc nét trên đường kẻ và đường cong trong ứng dụng dựa trên FXFX của JavaFX

Ví dụ: tôi lấy mã demo từ JavaFX Canvas documentation. Đây là kết quả từ một ứng dụng demo:

enter image description here

Và đây là kết quả từ ứng dụng FXML dựa trên:

enter image description here

Canvas đang được tạo bằng tay từ mã. Tại thời điểm vẽ nó là trên sân khấu rồi.

Hiệu ứng mờ, nắp đường tròn và kết nối đường tròn không giúp ích gì.

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

PS Có thể điều quan trọng là cùng một vấn đề với phông chữ: chống răng cưa dường như không hoạt động. Thử nghiệm trên Windows và Mac.

+1

thể bạn thêm một [mcve]? Không rõ vấn đề với giải pháp dựa trên fxml của bạn là gì vì bạn không đăng bất kỳ chi tiết nào ... – fabian

+0

@fabian, tôi thấy đó là vì tôi đang vẽ trên canvas từ một chuỗi khác (thực sự từ sự thay đổi của progressProperty() người nghe). Ngay cả Platform.runLater cũng không giúp được gì. – artplastika

Trả lời

1

Bạn cần đặt smooth="true" trên các yếu tố của mình.


Điều này cũng có thể được thực hiện trong trình tạo cảnh: Arc-> Properties-> "Smooth" khi sử dụng SceneBuilder (v8.2.0).

Kết quả:

Dưới đây là một đoạn trích từ tập tin FXML tạo:

<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

Tôi không sử dụng SceneBuilder, tôi vẽ hình cung trên canvas: 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

Các vấn đề liên quan