Grafika 2D
Transkrypt
Grafika 2D
Grafika 2D - SWING Aby stworzyć aplikację pozwalającą na rysowanie figur geomoetrycznych (jak również innych elementów grafiki 2D – np. Obrazów) musimy: ● Stworzyć klasę ramki (potomek JFrame) ● Stworzyć panel na którym będziemu umieszczać graficzne elementy. (pochodna JPanel) ● „narysować” i umieścić w panelu elementy graficzne ● Umieścić panel w powierzchni zawartości stworonej ramki ●Stworzyć i wyświetlić obiekt ramki. Tworzenie ramki public class Grafika2DRamka extends JFrame{ public Grafika2DRamka() { setTitle("Rysunki 2D"); setSize(500,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container k = getContentPane(); // teraz dodamy panel do kontenera, // panel definiujemy na następnym slajdzie PanelDoRysowania p = new PanelDoRysowania(); p.setBackground(Color.WHITE); k.add(p); } } Panel do rysowania class PanelDoRysowania extends Jpanel{ //abyn narysować własne elementy //przeciążamy metodę paintComponent public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D gd = (Graphics2D)g; Ellipse2D e = new Ellipse2D.Double(100,100,100,50); gd.draw(e); } } Elementy graficzne Wszystkie klasy podane poniżej pochodzą z pakietu java.awt.geom (import java.awt.geom.*) Kod oznaczony .Double (po nazwie lementu) oznacza typ argumentów jakie będziemy przekazywali. Istnieje również wersja używająca pojedynczej precyzji .Float //punkt o podanych współrzędnych Point2D.Double(double x, double y); //linia między dwoma punktami początkiem „p” i końcem „k” Line2D.Double(Point2D p, Point2D k); //Elipsa o współrzędnych lewego górnego narożnika prostokąta // „otaczającego” (x,y) oraz szerokości „s” i wysokości „w” Ellipse2D.Double(double x, double y, double s, double w); //Prostokąt (oznaczenia jak wyżej) Rectangle2D.Double(double x, double y, double s, double w); Klasa RectangularShape Wszystkie opisywane na poprzednim slajdzie obiekty dziedziczą po wspólnej klasie RectangularShape. Klasa ta dostarcza szereg metod zwiazanych z „obsługą” figur geometrycznych tego typu. W skład klasy wchodzą m. in.: //minimalne wartości prostokąta otaczającego double getMinX() double getMinY() //śrdodek prostokąta otaczającego double getCenterX() double getCenterY() //maksymalne wartości prostokąta otaczającego double getMaxX() double getMaxY() //rozmiar prostokąta otaczającego getWidth() getHeight() Kolory Kolor którym będzie rysowana figura wyieramy za pomocą metody setPaint klasy Graphics2D. Agumentem metody setPaint są obiekty klasy java.awt.Color Color.RED – predefiniowane stale klasy Color new Color(int r, int g, int b) – tworzenie obiektu klasy Color W połączeniu z metodą setPaint: setPaint(Color.RED); setPaint(new Color(255,255,0)); Wypełnienie Aby wypełnić stworzoną figurę kolorem ● Wybieramy kolor wypełnienia ● Korzystamy z metody fill klasy Graphics2D Ellipse2D el = new Ellipse2D.Double(ex0,ey0,100,100); gd.setPaint(Color.RED); gd.fill(el); gd.draw(el); Wyświetlanie obrazów class PanelDoRysowania extends JPanel{ public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D gd = (Graphics2D)g; Toolkit t = Toolkit.getDefaultToolkit(); Image obraz = t.getImage("img.jpg"); //tworzenie } MediaTracker mt = new MediaTracker(this); mt.addImage(obraz,0); try{ mt.waitForAll(); }catch (InterruptedException e){ e.printStackTrace(); } gd.drawImage(obraz,0,0,null); //wyświetlanie }