2016-04-13 15 views
1

JavaFX Polyline olarak oluşturmak istediğim bir şekildim ancak konturda birden çok renk var. Esasen, her iki tarafında 2 piksel genişliğinde siyah kenarlıklı 8 piksel genişliğinde mavi bir çizgi olacaktır. ben istediğim gibi işlerken ben şimdi yerine bir Polyline daha Group var, YaniBir JavaFX polyline konturunu özelleştirme

Group group = new Group(); 
double[] coords = ... 

Polyline bg = new Polyline(coords); 
bg.setStroke(Color.BLACK); 
bg.setStrokeWidth(12); 

Polyline fg = new Polyline(coords); 
fg.setStroke(Color.BLUE); 
fg.setStrokeWidth(8); 

group.getChildren().add(bg); 
group.getChildren().add(fg); 

, bu yüzden yapabilirsiniz: Bir Group oluşturarak ve ardından Group içine iki Polylines ekleyerek aynı etkiyi elde edebilirsiniz Shape olarak davranın. Özel bir çizim mekanizması belirtmenin bir yolunu göremiyorum, bunun için bir yolu var mı?

+0

Kontrol bu [soru] (http://stackoverflow.com/questions/28764190/javafx-line-fill-color/28765099#28765099). Polyline'nızı bir dizi koleksiyona dönüştürebilir ve aynı çözümü uygulayabilirsiniz. Ancak, birleştirmelerde sorunlarınız olacak. –

+0

Amacımın tek bir Polyline düğümüyle kalmasını sağlamak olduğunu düşünürsek, bu yaklaşım işe yaramayacaktır. Düğümü diğer düğümlere ayırmayı veya onu işlemek için farklı bir düğüm türü kullanmayı gerektirmeyen bir çözüme ihtiyacım var. Açık olmak gerekirse, eğer cevap “bu mümkün değil” ise, bunu benim ihtiyaçlarına uymayan bir çözümden daha çok duymayı tercih ederim. – ctg

cevap

1

Genel olarak, sorgunuzda özetlediğiniz grup tabanlı yaklaşımı seviyorum. Özel durumunuza uymaması talihsiz bir durumdur, ancak bu soruya cevap verenler için, başvuruları için tercih edilen bir çözüm olabilir.


Sen sınır rengini oluşturmak için PolyLine bir DropShadow efekti uygulanabilir. Bu, köşeler için biraz yuvarlak kenarlarla sonuçlanacak ve dilediğiniz gibi olabilir ya da olmayabilir.

polyline

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.effect.*; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Polyline; 
import javafx.stage.Stage; 

public class Polyanna extends Application { 
    @Override 
    public void start(Stage stage) { 
     Polyline polyline = new Polyline(); 
     polyline.getPoints().addAll(50.0, 50.0, 
       200.0, 100.0, 
       100.0, 200.0 
     ); 
     polyline.setStrokeWidth(8); 
     DropShadow borderEffect = new DropShadow(
       BlurType.THREE_PASS_BOX, Color.BLUE, 2, 1, 0, 0 
     ); 
     polyline.setEffect(borderEffect); 

     stage.setScene(
       new Scene(
         new Group(polyline), 
         250, 250 
       ) 
     ); 
     stage.show(); 
    } 

    public static void main(String\[\] args) { 
     launch(args); 
    } 
} 

alternatif seçenek Dolgu ve çizgi yerine çoklu çizgi ile Polygon çıkarmaktır. Bir Polyline için puan bir dizi alır ve oluşturmak için shape intersection capabilities kullanabilirsiniz işin ;-)


bir parça (yani giriş diziden Poligon noktalarının eşleşen bir dizi üreten bir rutin yazabilirsiniz İstediğiniz en yakın şeyi elde etmenin en kolay yolu ile doldurabileceğiniz ve inme yapabileceğiniz keyfi bir şekil. Bu yaklaşımla, sınır renklerinin konturu için çizgi kapakları, azaltma ve çizgi birleştirme ayarları gibi şeylerle ilgili programatik kontrolünüz vardır.

shape intersect

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.*; 
import javafx.stage.Stage; 

public class PolyIntersect extends Application { 
    private static final double W = 250; 
    private static final double H = 250; 

    @Override 
    public void start(Stage stage) { 
     Polyline polyline = new Polyline(); 
     polyline.getPoints().addAll(50.0, 50.0, 
       200.0, 100.0, 
       100.0, 200.0 
     ); 
     polyline.setStrokeWidth(8); 
     Rectangle bg = new Rectangle(0, 0, W, H); 
     Shape shape = Shape.intersect(bg, polyline); 
     shape.setFill(Color.BLACK); 
     shape.setStroke(Color.BLUE); 
     shape.setStrokeType(StrokeType.OUTSIDE); 
     shape.setStrokeWidth(2); 

     stage.setScene(
       new Scene(
         new Group(shape), 
         W, H 
       ) 
     ); 
     stage.setResizable(false); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

DropShadow tam aradığım şey. Teşekkürler! – ctg