A Kempelen Farkas Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerű felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

1.2. A Musztáng

Azaz a teljes és hivatalos nevén: Java Platform, Standard Edition 6, röviden Java SE 6. Az ennek a platformnak megfelelő Java fejlesztői csomag a Java SE Development Kit 6, röviden a JDK 6. Ezt kell letöltenünk, ha fejleszteni akarunk, a letöltés tekintetében lásd A Java telepítése gépünkre című pontot.

A Musztángban - szemben az előzővel, a Tigrissel - nem történtek változások magát a Java nyelvet illetően, ellenben például a Musztáng Java OO világ gyarapodott. Ezt a gyarapodást mi a GUI kapcsán tekintjük át, ahol több látványos újításról tudunk örömhírt adni. Részletesebben az értesítési területhez való hozzáféréssel és az indítóképernyő használatával foglalkozunk a következő pontokban.

A Musztángtól lehetőségünk van a programunkhoz a szokásos menüvel ellátható gyorsindító ikont (java.awt.TrayIcon) elhelyezni az értesítési területen (java.awt.SystemTray). Arra az egyszerű esetre mutatunk példát, amikor a programunk futásakor elhelyezi ide a megfelelő ikonját és feldolgozza az ikonról érkező legegyszerűbb eseményt: példaként tehát, ha duplán kattintunk, akkor kimenti hősünket esetleges szorult helyzetéből és visszadobja a labirintus kezdő pontjába.

                            
// Ha a rendszerben támogatott az értesítési terület
if (java.awt.SystemTray.isSupported()) {
    // akkor egy kis 16x16 pixel méretű
    java.awt.Image ikonKép = new javax.swing.ImageIcon
            ("ikon.png").getImage();
    // értesítő ikont
    java.awt.TrayIcon értesítőIkon =
            new java.awt.TrayIcon(ikonKép,
            "Javat tanítok labirintus");
    // most mi is kiteszünk
    try {
        java.awt.SystemTray.getSystemTray().
                add(értesítőIkon);
    } catch (java.awt.AWTException e) {
        System.out.println("Értesítő ikon kitétele: "
                + e);
    }
    // amire ha duplán kattintunk, akkor
    értesítőIkon.addActionListener(
            new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // például szorult helyzetéből kimenekítve a
            // hőst, visszadobjuk a kiindulási pozíciójába
            hős.sor(9);
            hős.oszlop(0);
            repaint();                    
        }
    });            
}
                            
                            

Ha programunk indulása a szokásostól több időt vesz igénybe, mert sok erőforrást, például képeket kell betöltenie, bonyolult adatszerkezeteket, inicializálásokat elvégeznie, akkor elegáns ennek az időnek a múlását demonstráló képernyővel informálni, szórakoztatni a felhasználót. A Mustang erre lehetőséget ad. A legegyszerűbb módja ennek, hogy amikor a programunkat átadjuk a Java Virtuális Gépnek, akkor a -splash kapcsolót használva az indító képernyőnek (java.awt.SplashScreen) szánt képet is átadjuk. A következőkben példaként a LabirintusAlkalmazás programunkat ruházzuk fel ezzel a lehetőséggel.

Ezt az indító képet készítettük, alul a folyamatjelzőt (progress bar) pusztán a rajzolóprogrammal tettük rá, hogy le tudjuk olvasni a kívánt koordinátákat. A labirintus játékot indító kép terve.

Minél közelebb járunk ahhoz, hogy programunk befejezze az indulás kapcsán elvégzett időigényes dolgait, annál nagyobb sárga, hosszú, lapos téglalapot rajzolunk majd. Szükségünk lesz a téglalap bal felső sarkának a koordinátáira és a téglalap szélességére, magasságára. Ezeket a következő ábra szerint olvassuk le. Koordináták az indítóképen.

A 8. oszlop 285. sora lesz a téglalap bal felső sarka, a szélessége 382 , a magassága pedig 10 pixel.

                            
// Hozzáférünk az indító képernyőhöz
java.awt.SplashScreen indítóKépernyő
        = java.awt.SplashScreen.getSplashScreen();
// Ha sikerül, azaz, ha java -splash:kép állomány neve
// formában indítottuk és még látszik a kép
if(indítóKépernyő != null) {
    // akkor rajzolni fogunk rá
    java.awt.Graphics2D g = indítóKépernyő.createGraphics();
    // némi szöveget, amit akár a rajzolóprogrammal is
    // ráírhattunk volna            
    java.awt.Font font1 = new java.awt.Font("Sans",
            java.awt.Font.BOLD, 20);
    java.awt.Font font2 = new java.awt.Font("Monospaced",
            java.awt.Font.BOLD, 12);
    g.setFont(font1);
    // világosabb sárgával
    g.setColor(new java.awt.Color(250, 255, 138));
    g.drawString("Javat tanítok labirintus", 8, 240);
    g.setFont(font2);
    g.drawString("Bátfai Norbert", 10, 265);
    g.drawString("nbatfai@inf.unideb.hu", 10, 280);            
    // és rajzolunk egy a konkrét kép méretéhez igazított
    // progress bar szerűséget (kommentben az indító
    // képernyő méretéhez relatív adatok)
    int sz = 382; // indítóKépernyő.getSize().width-10;
    int barSzélesség = sz/10;
    int m = 10; // indítóKépernyő.getSize().height;
    int barMagasság = 6;
    // itt szimuláljuk a játék időigényes dolgainak
    // betöltését, 10 x fél másodperig altatjuk majd
    // a szálunkat
    for(int i = 0; i<10; ++i) {
        // és ennek megfelelően frissítjük mit
        // mutasson a progress bar-unk
        g.setColor(java.awt.Color.WHITE);
        g.drawRect(8, 285, //5, m-20,
                10*barSzélesség, barMagasság);
        g.fillRect(8, 285, //5, m-20,
                10*barSzélesség, barMagasság);
        g.setColor(java.awt.Color.YELLOW);
        g.drawRect(8, 285, //5, m-20,
                10*barSzélesség, barMagasság);
        g.fillRect(8, 285, //5, m-20,
                (i+1)*barSzélesség, barMagasság);
        indítóKépernyő.update();
        try {
            // a fél másodperces altatás
            // ez szimulálja pl., hogy töltjük be
            // a már hatalmas labirintus játékunk
            // képerőforrásait, készítjük a megfelelő
            // adatszerkezeteket stb.
            Thread.sleep(500);
        } catch(Exception e) {}
    }
}
                            
                            

Végül lássuk munkánk eredményét! Például Linuxon az XFCE felület alatt nézzük meg az indítóképernyőt az alábbi képeken.

A labirintus indítóképpel indítva.

A labirintus indítóképe.

Illetve ugyancsak Linuxon a GNOME felületet használva az indítóikont.

Az 32x32 pixeles indítóikon megjelenése.