1. díl - Programování jednoduchých Java GUI her - IDE, Okno, Panel

Java Tvorba her Programování jednoduchých Java GUI her - IDE, Okno, Panel

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Tutoriál pro ty, kteří mají základy programovacího jazyka Java, a kteří se chtějí naučit, jak psát jednoduché grafické hry v tomto jazyce.

V prvním díle tohoto tutoriálu se seznámíme s komponentami JFrame a JPanel z balíčku javax.swing. Nejdříve si ale povíme něco o vývojovém prostředí.

IDE

Vývojové prostředí (Integrated Development Environment) je program, který usnadňuje programátorovi vývoj aplikací. Vzhledem, že tento tutoriál požaduje určité znalosti programovacího jazyka Java, předpokládám, že většina z vás, se již s tímto termínem setkala, a že nějaké vývojové prostředí umí používat. Pokud jste však doposud všechny zdrojové kódy psali v textovém editoru, je teď ideální čas, se s nějakým IDE seznámit.

Nikoho samozřejmě nenutím. Můžete klidně zůstat u svého oblíbeného textového editoru a tuto kapitolu přeskočit. Jen chci podotknout, že u větších aplikací IDE obrovsky ulehčí a urychlí práci.

Pro Javu existuje řada vývojových prostředí. Ze své zkušenosti vám pro začátek mohu doporučit IDE NetBeans. Pracovat s ním se dá rychle naučit, je intuitivní a přehledný. Záleží ale čistě na vás.

Magické slůvko this

Během celého tutoriálu se budete setkávat s výrazy jako:

this.nazevMetody();
this.nazevPromenne();

Je to totéž, jako bych napsal:

nazevMetody();
nazevPromenne();

Proč to tedy dělám a přidávám si práci? Právě kvůli IDE. Pokud budete používat IDE a budete volat metodu nějakého objektu např.

mujObjekt.metodaObjektu()

Po napsání tečky vám IDE napoví, jaké metody a proměnné můžete použít. Slovo this se dá přeložit jako tentoObjekt. Pokud tedy napíši

this.

IDE mi napoví metody a proměnné použitelné pro tento objekt. Podívejte se na následující třídu a obrázek.

public class Ide {
    /**
     * Proměnná, ve které je uloženo heslo.
     */
    int heslo = 1234;

    /**
     * Proměnná, ve které je uložen uvítací pozdrav.
     */
    String pozdrav = "Ahoj";

    String nejakyText;

    public void vytiskniPozdrav() {
        System.out.println(this.pozdrav);
    }
}
NetBeans IDE

IDE navíc zobrazilo i dokumentační komentář. To se hodí zvláště v případě, kdy jste danou metodu nepsali vy, ale někdo jiný. Pokud má dokumentační komentář, IDE vám ho zobrazí.

Zkratky

Každé IDE nabízí různé zkratky pro nejpoužívanější činnosti a příkazy. Pokud používáte NetBeans, tak vás upozorním na dvě nejpoužívanější, aby jste nemuseli tolik psát.

Pokud napíšete sout a stisknete tabulátor, Netbeas za vás napíší

System.out.println("");

A pokud napíšete psvm a stisknete tabulátor

public static void main(String[] args) {

}

Okno

Pro programování grafických programů budeme používat javovské knihovny AWT a hlavně Swing. Základem grafického programu je hlavní okno.

import javax.swing.JFrame;

public class OknoProgramu extends JFrame {

    public OknoProgramu() {
        this.setTitle("Hlavní Okno Programu");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 300);
    }

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

Abychom mohli nějakou komponentu z knihovny použít, musíme ji nejdříve naimportovat:

import javax.swing.JFrame;

Knihovna Swing nám dává k dispozici velké množství připravených tříd pro vytváření grafických objektů. Pokud tedy chceme vytvořit grafickou komponentu, stačí nám pouze vytvořit instanci daného objektu pomocí new. Pokud nám ale nebude zcela vyhovovat daný grafický objekt (což většinou nebude) a budeme ho chtít pozměnit, musíme vytvořit vlastní třídu, která bude dědit z knihovní třídy a ve své třídě provést potřebné změny.

public class OknoProgramu extends JFrame
{
}

Dědíme z třídy JFrame, což je třída představující hlavní okno. JFrame je kontejner, do kterého budeme vkládat další komponenty.

V konstruktoru nastavíme titulek okna

this.setTitle("Hlavní Okno Programu");

, co se má provést při stisknutí křížku (zavření okna)

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

a výchozí velikost okna.

this.setSize(400, 300);

Hlavním vstupním bodem programu je metoda main(), ve které vytvoříme instanci naší třídy. Aby bylo okno viditelné musíme ho nastavit na visible.

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

Nyní můžeme program spustit.

Okno v Java Swing

Panel

JFrame, potažmo naše odvozená třída, představuje pouze rám, obal, do kterého zabalíme další komponenty uživatelského prostředí. Zatímco JFrame nám umožňuje takové činnosti jako je zavření okna, nastavení titulku apod., tak JPanel nám poskytuje plochu, na kterou můžeme kreslit, umisťovat další komponenty, nastavovat barvu apod.. Zatímco JFrame je rám, tak JPanel budeme používat jako kreslící plátno.

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

public class MujPanel extends JPanel {

    public MujPanel() {
        this.setBackground(Color.red);
    }
}

Importujeme třídu Color a třídu JPanel, kterou zdědíme a upravíme k obrazu svému.

public MujPanel() {
    this.setBackground(Color.red);
}

V kostruktoru jsme nastavili barvu pozadí na novou barvu.

Nyní vytvoříme hlavní okno a náš panel do něj umístíme.

import javax.swing.JFrame;

public class MujProgram extends JFrame {

    MujProgram() {
        this.setTitle("Můj Program");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

        this.setSize(400, 300);
    }

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

A takhle to vypadá.

Okno s panelem v Java Swing

Přidali jsme pouze dva řádky kódu.

MujPanel panel = new MujPanel();

Vytvoří instanci (objekt) našeho panelu a

this.add(panel);

vloží náš panel do hlavního okna programu.

Velikost hlavního okna nemusíme definovat přímo, jak jsme to doposud dělali, ale můžeme nastavit velikost panelu (což je logičtější, protože na něm budeme pracovat) a hlavní okno nechat přizpůsobit velikosti pracovní plochy - panelu.

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

public class MujPanel extends JPanel {

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

V konstruktoru nastavíme barvu pozadí na zelenou a požadovanou velikost panelu na šířku 400px a výšku 300px. Objekt typu Dimension má dvě vlastnosti a to width a height a několik metod pro získání a nastavení těchto vlastností.

Teď ještě vytvoříme třídu pro hlavní okno.

import javax.swing.JFrame;

public class MujProgram extends JFrame {

    MujProgram() {
        this.setTitle("Můj Program");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

        this.pack();
    }

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

Všimněte si, že velikost okna již nezadáváme přímo, ale voláme metodu pack(), která okno zabalí okolo panelu. Také si všimněte, že okno je větší, než v předchozím případě. Je to proto, že jsme zadali velikost panelu a okno má ještě další náležitosti jako jsou okraje a titulek.

Okno s panelem v Java Swing

 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal vita
Avatar
vita

Jak se ti líbí článek?
Celkem (10 hlasů) :
3.700013.700013.700013.70001 3.70001


 


Miniatura
Všechny články v sekci
Tvorba her v Java Swing

 

 

Komentáře
Zobrazit starší komentáře (4)

Avatar
albertpatera
Redaktor
Avatar
albertpatera:

nějak mi to nefunguje, protože když tam napíšu

public class MujProgram extends JPanel

a

public class MujProgram extends JFrame

,
tam mi to háže chybu, nevíte co mám tedy špatně? díky za odpověď

 
Odpovědět 23.6.2014 21:19
Avatar
Odpovídá na albertpatera
Ondřej Štorc:

Ono by nebylo uplně od věci napsat jakou chybu..

Odpovědět 23.6.2014 21:49
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Jan Vargovský
Redaktor
Avatar
 
Odpovědět 24.6.2014 2:59
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na albertpatera
Jan Vargovský:

Koukám nato a jestli vytváříš 2 třídy se stejným názvem, tak tam je MujPanel místo MujProgram u toho JPanelu.

 
Odpovědět 24.6.2014 3:18
Avatar
albertpatera
Redaktor
Avatar
Odpovídá na Jan Vargovský
albertpatera:

aha...to bude asi tim, nevšiml jsem si toho, dík moc ;-)

 
Odpovědět 24.6.2014 19:38
Avatar
B42P6
Člen
Avatar
B42P6:

Aky je rozdiel medzi
setSize() a
setPreferredSi­ze()

Odpovědět 19.5.2015 11:25
'long long long' is too long for GCC
Avatar
Richard H.
Redaktor
Avatar
Richard H.:

Když použiješ setPreferredSize spustíš to a maximalizuješ a potom obnovíš z maxima tak se ti to zmenší právě na tu preferredSize

Odpovědět 11.8.2015 10:43
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Adam Rajníček:

Dobrý deň, chcel by som poradiť s tím ako nastaviť veľkosť na celú obrazovku. Vopred Ďakujem!
P.S. Asi to niekde bolo napísané ale ja som to nepochopil: :)

 
Odpovědět 7. února 21:01
Avatar
nalimleinad
Člen
Avatar
Odpovídá na Adam Rajníček
nalimleinad:

Pokud správně googlím, tak by to mělo být toto: http://stackoverflow.com/…-screen-java tzn. 3 parametry.

 
Odpovědět 7. února 22:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 14. Zobrazit vše