Zielony Smok

JavaFX canvas: rysowanie prostokąta

Metoda void strokeRect(double x, double y, double w, double h)

x – współrzędna x lewego górnego wierzchołka.

y – współrzędna y lewego górnego wierzchołka.

w – szerokość prostokąta

h – wysokość prostokąta.

Rysuje kontur prostokąta.

Podlega atrybutom wspólnym i atrybutom obwiedni.

Klasa Listing25_21a

Ściągnij klasę Listing25_21a

package rozdzial25c;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.stage.Stage;

public class Listing25_21a extends Application {

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

    @Override
    public void start(Stage stage) {
        try {
            Group root = new Group();
            Canvas cv = new Canvas(300, 300);
            GraphicsContext gc = cv.getGraphicsContext2D();
            //-
            gc.strokeRect(50,50,200,100);
            //-
            root.getChildren().add(cv);
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.setTitle("Metoda strokeRect");
            stage.setOnCloseRequest(e -> Platform.exit());
            stage.show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ustawione są jedynie domyślne atrybuty renderowania.

Wynik uruchomienia klasy (Rys. 25_03):

Metoda strokeRect
Rys. 25_03. Metoda strokeRect

Metoda void fillRect(double x, double y, double w, double h)

x – współrzędna x lewego górnego wierzchołka.

y – współrzędna y lewego górnego wierzchołka.

w – szerokość prostokąta

h – wysokość prostokąta.

Rysuje wypełnienie prostokąta.

Podlega atrybutom wspólnym i atrybutom wypełnienia

Klasa Listing25_21b

Ściągnij klasę Listing25_21b

package rozdzial25c;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.stage.Stage;

public class Listing25_21b extends Application {

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

    @Override
    public void start(Stage stage) {
        try {
            Group root = new Group();
            Canvas cv = new Canvas(300, 300);
            GraphicsContext gc = cv.getGraphicsContext2D();
            //-
            gc.fillRect(50,50,200,100);
            //-
            root.getChildren().add(cv);
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.setTitle("Metoda fillRect");
            stage.setOnCloseRequest(e -> Platform.exit());
            stage.show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ustawione są jedynie domyślne atrybuty renderowania.

Wynik uruchomienia klasy (Rys. 25_04):

Metoda fillRect
Rys. 25_04. Metoda fillRect

Warto zapamiętać

   gc.setGlobalAlpha(0.8);
   gc.setFill(Color.BLUE);
   gc.setStroke(Color.GRAY);
   gc.setLineWidth(10);
   gc.strokeRect(50,50,200, 100);
   gc.fillRect(50,50,200,100);
Kontur i wypełnienie
Rys. 25_05. Kontur i wypełnienie

Na rys. 25_05 połowa szerokości konturu jest zasłonięta później narysowanym wypełnieniem i widać mieszanie się
kolorów ponieważ nieprzezroczystość jest ustawiona na 0.8

    gc.setGlobalAlpha(0.8);
    gc.setFill(Color.BLUE);
    gc.setStroke(Color.GRAY);
    gc.setLineWidth(10);
    gc.fillRect(50,50,200,100);
    gc.strokeRect(50,50,200, 100);
Wypełnienie i kontur
Rys. 25_06. Wypełnienie i kontur

Na rys. 25_06 połowa szerokości konturu zasłania narysowane wcześniej wypełnienie. Widać mieszanie się
kolorów ponieważ nieprzezroczystość jest ustawiona na 0.8.

W obu przypadkach kolor wynikowy wynika z atrybutu BLEND MODE ustawionego na SRC_OVER. Przy
zastosowaniu innego sposobu kompozycji kolorów otrzymalibyśmy inny efekt. Wszystko zostanie dokładnie
omówione i pokazane w dalszym ciągu tekstu.