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().

