Do programowania grafiki 2D służy biblioteka Java2D, która stanowi część platformy Java SE. W zestawie znajdziesz przykłady oraz ćwiczenia dotyczące renderowania obiektów graficznych oraz użycia kolorów, gradientów, tekstur, przezroczystości i wykorzystania fontów dostępnych w lokalnym środowisku graficznym.
Poniżej znajdziesz definicję klasy Plansza rozszerzającej klasę biblioteczną javax.swing.JPanel
, zawierającą pole figura typu java.awt.Shape
, oraz odpowiednią klasę Program
służącą do przetestowania przykładu w oknie interfejsu graficznego (javax.swing.JFrame
).
import javax.swing.*; import java.awt.*; import java.awt.geom.*; class Plansza extends JPanel { Shape figura; Plansza(Shape figura) { this.figura=figura; } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d=(Graphics2D)g; g2d.draw(figura); } } public class Program { public static void main(String[] args) { Shape obj1; obj1=new Rectangle2D.Float(100,100,140,100); Plansza p; p=new Plansza(obj1); JFrame jf=new JFrame(); jf.add(p); jf.setTitle("Test grafiki"); jf.setSize(400,400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } }
ćw. 8.1
Zidentyfikuj składowe klas, przeanalizuj cel ich użycia oraz składnię, a także przeanalizuj dokumentację dotyczącą każdej spośród wykorzystanych klas bibliotecznych. Zestaw odpowiednią jednostkę kompilacji i przetestuj przykład.
ćw. 8.2
Utwórz planszę z prostokątem reprezentowanym przez obiekt Rectangle2D.Float
i elipsą reprezentowaną przez obiekt Ellipse2D.Float
. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy te figury się przecinają. Do testu użyj instrukcji „if” oraz metody void drawString(String str, float x, float y)
klasy java.awt.Graphics2D
(być może będziesz musiał zastosować odpowiednie rzutowanie).
ćw. 8.3
Utwórz planszę z prostokątem reprezentowanym przez obiekt Rectangle2D.Float
i elipsą reprezentowaną przez obiekt Ellipse2D.Float. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy te figury się zawierają.
ćw. 8.4
Utwórz planszę z prostokątem reprezentowanym przez obiekt Ellipse2D.Float
i punktem reprezentowanym przez obiekt Point2D.Float. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy ten punkt leży wewnątrz prostokąta.
ćw. 8.5
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program który wyrenderuje zielony prostokąt z wypełnieniem.
ćw. 8.6
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje elipsę pokrytą gradientem według wzoru na rysunku poniżej.
ćw. 8.7
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje elipsę pokrytą gradientem radialnym.
ćw. 8.8
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje prostokąt i pokryje go teksturą pobraną z dowolnego pliku jpg.
Obiekt BufferedImage może być utworzony w następujący sposób
import java.io.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; // (...) String plik="plik.jpg"; BufferedImage img; try { File f=new File(plik); img=ImageIO.read(f); } catch(IOException e) { System.err.println("Problem z plikiem"); }
ćw. 8.9
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje dwie przenikające się elipsy, przedstawione na rysunku poniżej.
Obiekt AlphaComposite może być utworzony na przykład w następujący sposób
AlphaComposite a = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);
ćw. 8.10
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje fragment łuku (Arc2D) przedstawiony na rysunku poniżej.
ćw. 8.11
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje linie przedstawione na rysunku poniżej. Zwróć uwagę na zakończenia linii.
ćw. 8.12
Posługując się dokumentacją klasy java.awt.Graphics2D
i jej metod napisz program, który wyrenderuje figury przedstawione na rysunku (Polygon) i za pomocą odpowiednich metod kontekstu graficznego zademonstruje operacje translacji, rotacji i skalowania. Zwróć uwagę na sposób łączenia linii.
ćw. 8.13
Rozwiń kalkulator z poprzedniego zestawu poprzez dodanie funkcjonalności kalkulatora graficznego - Twój kalkulator powinien posiadać funkcjonalność zwykłego kalkulatora oraz powinien rysować wykresy funkcji (w tym celu będziesz musiał także rozwiązać problem parsowania wyrażeń matematycznych, możesz w tym celu ograniczyć się do pewnego podzbioru wyrażeń, na przykład wielomianów lub funkcji wymiernych).
Z. Dendzik, 2024