NazajNaprejKazalo

Java2D - Risanje likov


2.1 Shape razredi

Z uporabo AWT lahko na splošno rišemo like s klicem drawXxx ali fillXxx metode objekta Graphics. V Javi2D pa najprej kreiramo objekt Shape, in šele potem kličemo draw ali fill metodo objekta Graphics2D, ki ji kot argument pošljemo želeni Shape objekt. Še vedno pa lahko uporabljamo tudi drawXxx in fillXxx metode. To je nujno potrebno za drawString ali drawImage in priročno za draw3DRect. Več razredov ima sebi podobne različice, ki shranjujejo koordinate ali kot števila z dvojno natančnostjo (double precision numbers - Xxx.Double) ali enojno (single precision numbers - Xxx.Float). Poglavitna razlika je, da naj bi bile koordinate z enojno natančnostjo rahlo hitrejše za preračunavanje na določenih platformah.

Nekaj glavnih vgrajenih likov:

2.2 Primer programa

Izvorne kode: DrawExample1.java, WindowUtil.java, and ExitListener.java.

DrawExample1.java

import com.sun.java.swing.*; // Za JPanel...

import java.awt.*;           // Za Graphics...

import java.awt.geom.*;      // Za Ellipse2D...



/** An example of drawing/filling shapes with

 *  Java2D in Java 1.2.

 *  1998 Marty Hall, http://www.apl.jhu.edu/~hall/java/

 */



public class DrawExample1 extends JPanel {

  private Ellipse2D.Double circle =

    new Ellipse2D.Double(10.0, 10.0, 350, 350);

  private Rectangle2D.Double square =

    new Rectangle2D.Double(10.0, 10.0, 350, 350);



  public void paintComponent(Graphics g) {

    Graphics2D g2d = (Graphics2D)g;

    g2d.clearRect(0, 0, getSize().width, getSize().height);

    g2d.fill(circle);

    g2d.draw(square);

  }



  protected Ellipse2D.Double getCircle() {

    return(circle);

  }



  public static void main(String[] args) {

    WindowUtil.openInJFrame(new DrawExample1(), 380, 400);

  }

}

WindowUtil.java

import com.sun.java.swing.*;

import java.awt.*;



/** Poenostavljen način prikaza kako JPanel ali kak drug Container

 *  uporabla Swing. Prikaže JFrame z določenim Containerjem

 *  kot vsebino.

 *  1998 Marty Hall, http://www.apl.jhu.edu/~hall/java/

 */



public class WindowUtil {

  public static JFrame openInJFrame(Container content,

                                    int width,

                                    int height,

                                    String title,

                                    Color bgColor) {

    JFrame frame = new JFrame(title);

    frame.setBackground(bgColor);

    frame.setSize(width, height);

    frame.setContentPane(content);

    frame.addWindowListener(new ExitListener());

    frame.setVisible(true);

    return(frame);

  }



  /** Vzame Color.white kot barvo ozadja. */



  public static JFrame openInJFrame(Container content,

                                    int width,

                                    int height,

                                    String title) {

    return(openInJFrame(content, width, height, title,

                        Color.white));

  }



  /** Uporablja Color.white kot barvo ozadja in ime Container razreda

   *  kot naslov za JFrame.

   */



  public static JFrame openInJFrame(Container content,

                                    int width,

                                    int height) {

    return(openInJFrame(content, width, height,

                        content.getClass().getName(),

                        Color.white));

  }

}

ExitListener.java

import java.awt.*;

import java.awt.event.*;



/** Listener, ki ga postavimo na začetek Frame ali JFrame

 *  dela aplikacije, zato da ko zapremo okvir

 *  istočasno zapremo tudi aplikacijo.

 *  1998 Marty Hall, http://www.apl.jhu.edu/~hall/java/

*/



public class ExitListener extends WindowAdapter {

  public void windowClosing(WindowEvent event) {

    System.exit(0);

  }

}

2.3 Risanje likov: Primer izpisa

V Javi2D narisan lik

NazajNaprejKazalo

avtor: Filip Božič
december, 1998