2. díl - Java Swing pod pokličkou

Java Swing Java Swing pod pokličkou

V minulém dílu seriálu tutoriálů o Java Swing jsme naprogramovali, tedy spíše naklikali, svou první formulářovou aplikaci v Javě. V dnešním dílu si vysvětlíme, jak funguje uvnitř.

Pod pokličkou

Samotný formulář je samozřejmě objekt (jak jinak :) ). Je definován třídou HlavniJFrame, kterou nalezneme v souboru HlavniJFrame.java.

Přepněme se do kódu třídy pomocí tlačítka Source. Některé části kódu jsou zašedlé a zklapnuté. Když ho celý rozbalíme a odstraníme komentáře, vypadá asi takto (nelekněte se :)):

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ář je třída, dědící z třídy JFrame. To je právě třída reprezentující okno. V konstruktoru se volá podivná metoda initComponents(), jejíž kód byl sklapnutý. I když ho rozbalíme, NetBeans nám do této části třídy neumožní psát.

Metodu initComponents() automaticky generuje NetBeans podle toho, co na formulář naklikáme. I když vypadá složitě, nedělá nic jiného, než že vytvoří postupně všechny prvky na formuláři a nastaví jim patřičné vlastnosti, které jsme zvolili. Vidíme zde, jak se tvoří náš label a nastavují se mu vlastnosti. Metoda se poté volá v konstruktoru, čímž se formulář inicializuje. Nezasvěcený programátor je tedy plně odstíněn od kódu, co generuje návrhář. Je to samozřejmě hlavně proto, aby ho nemohl rozbít :) Nicméně je důležité vědět, jak to funguje, abyste byli schopni např. přidávat kontrolky za běhu aplikace.

Protože Swing používá stejně jako např. HTML relativní pozicování prvků, generuje NetBeans spoustu dalších neviditelných komponent, jako jsou různé mezery, oddělovače a tzv. layouty. V tomto seriálu se jim věnovat nebudeme, jelikož to kvůli přítomnosti grafického návrháře nebudeme potřebovat. Jsou však detailně vysvětleny v seriálu o Ručním návrhu formulářů v Java Swing, kde se nepoužívá grafický návrhář a je tedy důležité, aby programátor rozuměl přesně tomu, jak se prvky na formulář umisťují, protože to musí dělat on sám.

Ve třídě nalezneme dále hlavní metodu main, která vytvoří formulář a nastaví mu tzv. Look and Feel. To je jednoduše řečeno Skin. Jako výchozí je v NetBeans vzhled Nimbus, hodnotu můžete přepsat na Windows, vaše aplikace poté bude vypadat jako jste zvyklí z Windows. Na konci metody se vytváří instance hlavního formuláře. Ve výchozím nastavení se okno aplikace po jejím spuštění objeví v levém horním rohu obrazovky. Uživatel by ho očekával spíše veprostřed a bohužel to nelze nastavit v Properties. Proto kód vytvoření formuláře upravíme a přidáme jeho vycentrování:

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

Když aplikaci spustíte, bude okno veprostřed obrazovky.

Na úplném konci souboru naleznete samotné komponenty, které jste na formulář naklikali. Všimněte si, že název jejich tříd vždy začíná na J, např. JLabel. Je to z toho důvodu, aby se odlišily od starších komponent z AWT a také proto, že se jedná o Java třídy.

Dnešní projekt je ke stažení v příloze článku včetně zdrojových kódů. Příště si vysvětlíme, jak fungují události a naprogramujeme si jednoduchou kalkulačku.


 

Stáhnout

Staženo 269x (19.61 kB)
Aplikace je včetně zdrojových kódů v jazyce java

 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (4 hlasů) :
4.54.54.54.54.5


 



 

 

Komentáře

Avatar
Tomhaus
Člen
Avatar
Tomhaus:

mě se nechce zobrazit ten vypsanej text

package clicker.graphics;

import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class Screen extends JPanel {
        private static final long serialVersionUID = 1L;

        private static final int WIDTH = 300, HEIGHT = 200;

        private JLabel panel01;

        public Screen(){
                setFocusable(true);
                setPreferredSize(new Dimension(WIDTH, HEIGHT));

                display();
        }

        public void display(){
                panel01 = new JLabel();
                panel01.setText("ahoj");

        }

}
Editováno 16.7.2014 16:32
Odpovědět 16.7.2014 16:29
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Tomhaus
Tomhaus:

ahh.. už sem na to přišel, musim to přidat add

Odpovědět 16.7.2014 16:49
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
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 2 zpráv z 2.