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

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 531x (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 (1)

Avatar
Kit
Redaktor
Avatar
Kit:

Takových vylepšení se tam dá najít víc.

  • místo "JFrame.EXIT_ON_CLO­SE" stačí "EXIT_ON_CLOSE"
  • místo "program.setVi­sible(true)" stačí "setVisible(true)"
  • místo "MujProgram program = new MujProgram()" je vhodnější

    "JFrame program = new MujProgram()"

  • místo "this.setTitle("Můj Program")" raději

    "super("Můj Program")"

atd. Každý programuje nějakým stylem.

Odpovědět 20.9.2013 21:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vita
Redaktor
Avatar
vita:

Souhlasím s tebou. Ctrl + space je super a také ho používám. Na druhou stranu si pamatuji, že když jsem se učil psát swingové aplikace, tak mi připadalo this. přirozené a kód se mi lépe četl. Tento tutoriál je zaměřen na ty, kteří se swingem mají minimální či žádné znalosti. Sám vím, jak mne první grafická hra, kterou jsem napsal, nakopla a posunula. Chtěl bych těm, co mají základy jazyka pomoci překonat to období mezi terminálovou a gui aplikací.

 
Odpovědět  +1 20.9.2013 22:18
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na vita
Hartrik:

Použití je ok, šlo mi hlavně o to, že si to podal jako jedinou možnost.

 
Odpovědět 20.9.2013 23:04
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.
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 11. Zobrazit vše