IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Programování jednoduchých Java GUI her - Kreslení

V minulé lekci, Programování jednoduchých Java GUI her - IDE, Okno, Panel, jsme se seznámili s komponentami JFrame a JPanel z balíčku javax.swing.

V tomto díle se podíváme na to, jak na JPanel kreslit různé tvary a text.

Kreslení

Třída hlavního okna bude zůstávat většinou stejná jako v předchozích příkladech.

import javax.swing.JFrame;

public class MujProgram extends JFrame {

    MujProgram() {
        this.setTitle("Jednoduchý Kreslící Program");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        KresliciPanel panel = new KresliciPanel();
        this.add(panel);

        this.pack();
    }

    public static void main(String[] args) {
        MujProgram program = new MujProgram();
        program.setVisible(true);
    }
}

Měnit se bude hlavně třída panelu.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;

public class KresliciPanel extends JPanel {

    public KresliciPanel() {
        this.setPreferredSize(new Dimension(400, 300));
        this.setFont(new Font("Courier", Font.BOLD, 20));
        this.setBackground(Color.RED);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Kreslení textu
        g.drawString("Ahoj", 50, 80);
        g.setColor(Color.GREEN);
        g.drawString("Nazdar", 120, 70);
        g.setColor(Color.WHITE);
        g.drawString("Čau", 10, 210);

        // Kreslení čar
        g.drawLine(30, 30, 200, 90);
        g.drawLine(50, 110, 90, 30);
        g.setColor(Color.MAGENTA);
        g.drawLine(10, 250, 360, 40);

        // Kreslení a vyplňování tvarů
        g.drawRect(300, 20, 65, 35);

        g.setColor(Color.DARK_GRAY);
        g.fillRect(200, 150, 50, 30);
        g.drawRect(200, 150, 50, 30);

        g.fillOval(320, 260, 70, 30);
        g.setColor(Color.CYAN);
        g.drawOval(320, 260, 70, 30);
    }
}
Kreslení na Graphics v Java Swing - Tvorba her v Java Swing

Přibyly nám dva nové importy z balíčku AWT. Třída Font slouží pro práci s písmem a třída Graphics pro práci s grafikou.

public KresliciPanel() {
    this.setPreferredSize(new Dimension(400, 300));
    this.setFont(new Font("Courier", Font.BOLD, 20));
    this.setBackground(Color.RED);
}

Pokud nám nevyhovuje přednastavené písmo, můžeme sami určit, jaký font se má použít. Stačí vytvořit instanci třídy Font a zadat tři parametry (typ písma, jaké má být, velikost v bodech). Jaké typy písma jsou k dispozici záleží na vašem operačním systému. K tomu zda má být písmo tučně, normálně či kurzívou slouží konstanty Font.BOLD, Font.PLAIN a Font.ITALIC.

Komponenty, na které je možno malovat, poskytují metodu paintComponent(), krerá je volána při vykreslení komponenty a ve které můžeme nadefinovat, co se má na komponentu kreslit.

public void paintComponent(Graphics g) {
}

Parametr Graphics představuje grafický kontext a umožňuje nám kreslení na libovolné grafické zařízení a je do metody vložen, takže se nemusíme starat o jeho vytvoření. Můžeme ho jednoduše rovnou začít používat.

super.paintComponent(g);

V naší třídě jsme přepsali metodu painComponent() a tím pádem jsme ztratili funkcionalitu, která byla naprogramována v rodičovské třídě. Tato metoda například kreslí pozadí. To by se nám docela hodilo takže to uděláme tak, že zavoláme rodičovskou metodu, ta se provede a pak se vykoná kód, který jsme napsali my.

// Kreslení textu
g.drawString("Ahoj", 50, 80);
g.setColor(Color.GREEN);
g.drawString("Nazdar", 120, 70);
g.setColor(Color.WHITE);
g.drawString("Čau", 10, 210);

Pokud chceme nakreslit text, voláme metodu drawString() třídy Graphics. Jako parametr zadáváme požadovaný text a souřadnice, kam chceme text nakreslit. Metoda setColor() nastavuje barvu, kterou se bude kreslit.

// Kreslení čar
g.drawLine(30, 30, 200, 90);
g.drawLine(50, 110, 90, 30);
g.setColor(Color.MAGENTA);
g.drawLine(10, 250, 360, 40);

Metoda drawLine(x1, y1, x2, y2) nakreslí čáru od bodu se souřadnicemi [x1, y1] k bodu se souřadnicemi [x2, y2].

// Kreslení a vyplňování tvarů
g.drawRect(300, 20, 65, 35);

g.setColor(Color.DARK_GRAY);
g.fillRect(200, 150, 50, 30);
g.drawRect(200, 150, 50, 30);

g.fillOval(320, 260, 70, 30);
g.setColor(Color.CYAN);
g.drawOval(320, 260, 70, 30);

Metoda drawRect(x1, y1, šířka, výška) nakreslí obrys obdélníku. Výplň obdélníku se provede metodou fillRect(x1, y1, šířka, výška). Doporučený postup je nejdříve provést vyplnění a teprve poté obrys, zvlášť pokud používáte rozdílné barvy. Metoda fillOval(x1, y1, šířka, výška) a drawOval(x1, y1, šířka, výška) vyplňuje a kreslí elipsu a zadané parametry určují obrysový obdélník elipsy. Kreslících metod existuje samozřejmě mnohem více a já vám ukáži ještě jednu užitečnou.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;

public class KresliciPanel2 extends JPanel {
    private int[] souradniceX = {
        50, 50, 70, 70, 90, 90, 110, 110,
        130, 130, 150, 150, 250, 250, 270,
        270, 290, 290, 310, 310, 330, 330,
        350, 350, 330, 330, 300, 270, 270};
    private int[] souradniceY = {
        300, 120, 120, 140, 140, 120, 120,
        140, 140, 120, 120, 200, 200, 50,
        50, 70, 70, 50, 50, 70, 70, 50, 50,
        300, 300, 240, 210, 240, 300};

    public KresliciPanel2() {
        this.setPreferredSize(new Dimension(400, 300));
        this.setBackground(Color.blue);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // parametry: pole souřadnic bodu x, pole souřadnice bodu y, počet bodů
        g.setColor(Color.darkGray);
        g.fillPolygon(souradniceX, souradniceY, souradniceX.length);
        g.drawPolygon(souradniceX, souradniceY, souradniceX.length);
    }
}

Pokud chcete vidět výsledek, budete si muset program spustit.

V příští lekci, Programování jednoduchých Java GUI her - Text, si ukážeme vykreslování textu na Jpanel a řekneme si něco o písmech.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 471x (1.91 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Programování jednoduchých Java GUI her - IDE, Okno, Panel
Všechny články v sekci
Tvorba her v Java Swing
Přeskočit článek
(nedoporučujeme)
Programování jednoduchých Java GUI her - Text
Článek pro vás napsal vita
Avatar
Uživatelské hodnocení:
20 hlasů
vita
Aktivity