Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

2. diel - Java Swing pod pokrievkou

V minulom dieli seriálu tutoriálov o Java Swing sme naprogramovali, teda skôr naklikali, svoju prvú formulárové aplikáciu v Jave. V dnešnom dieli si vysvetlíme, ako funguje vo vnútri.

Pod pokrievkou

Samotný formulár je samozrejme objekt (ako inak :) ). Je definovaný triedou HlavniJFrame, ktorú nájdeme v súbore HlavniJFrame.java.

Prepneme sa do kódu triedy pomocou tlačidla Source. Niektoré časti kódu sú zašednuté a zklapnuté. Keď ho celý rozbalíme a odstránime komentáre, vyzerá asi takto (nezľaknite sa :)) :

public class HlavniJFrame extends javax.swing.JFrame {

    public HlavniJFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Pozdrav");

        jLabel1.setText("Pozdrav z formuláře");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(41, 41, 41)
                .addComponent(jLabel1)
                .addContainerGap(47, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(45, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(43, 43, 43))
        );

        pack();
    }// </editor-fold>

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(HlavniJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HlavniJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    // End of variables declaration
}

Vidíme, že formulár je trieda, dedičom z triedy JFrame. To je práve trieda reprezentujúci okno. V konstruktoru sa volá podivná metóda initComponents (), ktorej kód bol Sklopenie. Aj keď ho rozbalíme, NetBeans nám do tejto časti triedy neumožní písať.

Metódu initComponents () automaticky generuje NetBeans podľa toho, čo na formulár naklikáte. Aj keď vyzerá zložito, nerobí nič iné, než že vytvorí postupne všetky prvky na formulári a nastaví im patričné vlastnosti, ktoré sme zvolili. Vidíme tu, ako sa tvoria náš label a nastavujú sa mu vlastnosti. Metóda sa potom volá v konstruktoru, čím sa formulár inicializuje. Nezainteresovaný programátor je teda plne odtienený od kódu, čo generuje návrhár. Je to samozrejme hlavne preto, aby ho nemohol rozbiť :) Avšak je dôležité vedieť, ako to funguje, aby ste boli schopní napr. Pridávať kontrolky za behu aplikácie.

Pretože Swing používa rovnako ako napr. HTML relatívna pozicovanie prvkov, generuje NetBeans veľa ďalších neviditeľných komponentov, ako sú rôzne medzery, oddeľovače a tzv. Layouty. V tomto seriáli sa im venovať nebudeme, pretože to kvôli prítomnosti grafického návrhára nebudeme potrebovať. Sú však detailne vysvetlené v seriáli o Ručným návrhu formulárov v Java Swing, kde sa nepoužíva grafický návrhár a je teda dôležité, aby programátor rozumel presne tomu, ako sa prvky na formulár umiestňujú, pretože to musí robiť on sám.

V triede nájdeme ďalej hlavné metódu main, ktorá vytvorí formulár a nastaví mu tzv. Look and Feel. To je jednoducho povedané Skin. Ako štandard je v NetBeans vzhľad Nimbus, hodnotu môžete prepísať na Windows, vaše aplikácie potom bude vyzerať ako ste zvyknutí z Windows. Na konci metódy sa vytvára inštancia hlavného formulára. V predvolenom nastavení sa okno aplikácie po jej spustení objaví v ľavom hornom rohu obrazovky. Užívateľ by ho očakával skôr veprostřed a bohužiaľ to nie je možné nastaviť v Properties. Preto kód vytvorenie formulára upravíme a pridáme jeho vycentrovanie:

public void run() {
    HlavniJFrame hlavniJFrame = new HlavniJFrame();
    hlavniJFrame.setLocationRelativeTo(null);
    hlavniJFrame.setVisible(true);
}

Keď aplikáciu spustíte, bude okno veprostřed obrazovky.

Na úplnom konci súboru nájdete samotné komponenty, ktoré ste na formulár naklikali. Všimnite si, že názov ich tried vždy začína na J, napr. JLabel. Je to z toho dôvodu, aby sa odlíšili od starších komponentov z AWT a tiež preto, že sa jedná o Java triedy.

Dnešný projekt je k stiahnutiu v prílohe článku vrátane zdrojových kódov. Nabudúce si vysvetlíme, ako fungujú udalosti a naprogramujeme si jednoduchú kalkulačku.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 385x (4.27 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Úvod do formulárových aplikácií v Java Swing
Všetky články v sekcii
Základy Java Swing
Preskočiť článok
(neodporúčame)
Jednoduchá kalkulačka v Java Swing
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity