JavaFX canvas: metody stroke i fill
Ani segmenty ani elementy ścieżek dodawane do ścieżki bieżącej nie określają czy są konturami, czy wypełnieniami, czy jednym i drugim.
Jeżeli chcemy odrysować elementy lub segmenty musimy użyć metody stroke
, metody fill
albo obu tych metod.
Obie metody dotyczą tych segmentów lub elementów, które są umieszczone na ścieżce przed miejscem użycia metody.
Elementy lub segmenty umieszczone po obu metodach – nie będą odrysowane.
Klasa Listing25_29
Ściągnij klasę Listing25_29
gc.rect(20,20,50,30); gc.stroke();
Otrzymamy kontur prostokąta (Rys. 25_24):
gc.rect(20,20,50,30); gc.stroke(); gc.rect(80, 20, 50, 30); gc.rect(140,20, 50, 30); gc.fill();
Pierwszy prostokąt również zareagował na metodę fill
, ale dwa ostatnie prostokąty nie maja konturu (Rys. 25_25).
gc.rect(20,20,50,30); gc.stroke(); gc.rect(80, 20, 50, 30); gc.rect(140,20, 50, 30); gc.fill(); gc.rect(200,20, 50, 30);
Ostatni prostokąt nie został odrysowany (Rys. 25_26).
gc.rect(20,20,50,30); gc.stroke(); gc.rect(80, 20, 50, 30); gc.rect(140,20, 50, 30); gc.fill(); gc.rect(200,20, 50, 30); gc.stroke();
Czwarty prostokąt zyskał kontur (Rys. 25_27).
Zyskały go również wszystkie poprzednie prostokąty.
Jak widzimy powstaje problem, który można rozwiązać przy użyciu – opisanej w następnym wpisie – metody beginPath()
.
Metoda void stroke()
Rysuje kontur ścieżki przy użyciu aktualnego farby. Na metodę wpływają atrybuty ogólne, atrybuty obwiedni oraz atrybuty ścieżki (nie podlega atrybutowi Fill Rule
. Segmenty ścieżki są transformowane w momencie dodawania segmentów, tak że zmiana bieżącej transformacja nie wpływa na te segmenty znowu, ale może wpływać na inne atrybuty w czasie wykonywania operacji stroke()
.
Metoda void fill()
Rysuje wypełnienie ścieżki przy użyciu aktualnej farby. Na metodę wpływają atrybuty ogólne, atrybuty wypełnienia oraz atrybuty ścieżki. Segmenty ścieżki są transformowane w momencie dodawania segmentów, tak że zmiana bieżącej transformacji nie wpływa na te segmenty znowu, ale może wpływać na inne atrybuty w czasie wykonywania operacji fill()
.