Vytlač príspevok
Odporuč príspevok
Bookmark and Share PRIDAŤ NA VYBRALI.SME.SK

Krúžok 5.2. 2007 - Kreslenie v Jave

Použitie triedy Graphics

Na kreslenie v Jave existuje v pricípe dva spôsoby ako získať inštanciu triedy Graphics pomocou ktorej môžeme kresliť.

1. Každý komponent má metódu getGraphics, ktorá vráti grafiku daného komponentu. Na konci nášho kreslenia, by sme mali zavolať metódu Graphics.dispose() . Táto konštrukcia sa využíva keď chceme niečo nakresliť v reakcii na dáku udalosť. Pokiaľ sa však komponent následne prekreslí napríklad zdôvodu skrolovania alebo zmeny veľkosti, tieto zmeny sa stratia. Príklad, ktorý sme robili, nám umožňuje jednoduché kreslenie:

package sk.gjh.kreslenie;

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;

public class OknoKreslenie extends JFrame {

  private int oldX = 0;

  private int oldY = 0;

  /**
   * Spustenie programu, vytvoríme nové okno a zobrazíme ho.
   
   @param args
   */
  public static void main(String[] args) {
    OknoKreslenie okno = new OknoKreslenie();
    okno.setVisible(true);
  }

  /**
   * Konštruktor okna, vytvorí a zaregistruje Listenery, ktoré regujú na
   * udalosti myši.
   */
  public OknoKreslenie() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300300);

    getContentPane().addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
        // Keď potiahneme myšou, treba nakresliť čiaru.
        Graphics g = getContentPane().getGraphics();
        g.drawLine(oldX, oldY, e.getX(), e.getY());
        oldX = e.getX();
        oldY = e.getY();
        g.dispose();
      }
    });

    getContentPane().addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        // Keď stlačíme myš, odpamatáme počiatočný bod a nakreslíme ho. 
        oldX = e.getX();
        oldY = e.getY();
        Graphics g = getContentPane().getGraphics();
        g.drawLine(oldX, oldY, e.getX(), e.getY());
        g.dispose();
      }
    });
  }
}

2. Druhý spôsob kreslenia spočíva v preťažení metódy paint( Graphics g ) ktorá je definovaná pre Component. Vhodným kandidátom pre tento komponent by bol java.awt.Canvas, ten však odporúčam používať len pre AWT aplikácie. Pre Swingové aplikácie je vhodnejšie použiť napríklad JPanel, ktorý už má implementované metódy na správu veľkosti a podobne, takisto si vie sám nakresliť pozadie.

Vlastnému panelu pridáme inštančné premenné, ktoré budú charakterizovať jeho stav, v metóde paint potom tento stav zobrazíme. Náš komplexný príklad bude kresliť grafy funkcií, pre začiatok by mohli stačiť kvadratické funkcie.

 

 


Java krúžok | stály odkaz

Komentáre

  1. JAVA
    Velmi dobry priklad, dobry kurz fakt super. Mohol by sa dalsi diel zaoberat obrazkami a ako ich ulozit na Jform na urcitu poziciu. Ked sa klikne mysou. Hodilo by sa mi to......
    publikované: 02.04.2007 17:28:44 | autor: Lulosal (e-mail, web, neautorizovaný)
Pozor, na konci je potreba spočítať neľahkú matematickú úlohu! Inak komentár nevložíme. Pre tých lenivejších je tam tlačidlo kúzlo.



Prevádzkované na CMS TeaGuru spoločnosti Singularity, s.r.o., © 2004-2014