SpuÜt∞nφ apletu v samostatnΘm okn∞

Ji°φ Kosek ml.

Cht∞l bych vytvo°it aplet v Jav∞, kter² by b∞₧el v samostatnΘm okn∞ a nebyl p°φmo souΦßstφ strßnky. Je mo₧nΘ tento aplet vytvo°it tak, aby jeho ₧ivotnost enbyla omezena pouze prohlφ₧enφm strßnky, ze kterΘ byl vyvolßn?

Vytvo°enφ okna, kterΘ se tvß°φ samostatn∞ a nezßvisle na prohlφ₧eΦi, nenφ v Jav∞ problΘm. StaΦφ vytvo°it instanci t°φdy Frame. Do nov∞ vytvo°enΘho okna m∙₧eme p°idßvat menu a dalÜφ dialogovΘ prvky, nebo do n∞j kreslit p°φmo p°edefinovßnφm metody paint().

V praxi bychom si tedy vytvo°ili novou t°φdu MojeOkno, kterß bude zalo₧ena na t°φd∞ Frame. Novou t°φdu ud∞lßme velice jednoduchou -- bude nßm staΦit, kdy₧ do okna vypφÜe n∞jak² text.

Vytvo°φme tedy konstruktor t°φdy MojeOkno(). V n∞m nastavφme jmΘno okna volßnφm p°edka (super). PotΘ vytvo°φme tlaΦφtko s krßtk²m nßpisem a vlo₧φme je do okna.

Abychom mohli naÜe nov∞ vzniklΘ okno n∞kdy zav°φt, musφme u n∞j implementovat rozhranφ WindowsListener, kterΘ slou₧φ jako Üablona pro obsluhu udßlostφ okna. NaÜe t°φda bude pro zjednoduÜenφ reagovat pouze na udßlost zav°enφ okna. V tomto p°φpad∞ zavolß metodu dispose(), kterß uvolnφ naÜe okno.

V samotnΘm inicializaΦnφm k≤du apletu staΦφ vytvo°it instanci naÜeho okna v prom∞nnΘ frame, nastavit velikost naÜeho okna a pomocφ metody frame.show() okno zobrazit.

Cel² aplet SamostatneOkno.java vypadß tedy takto:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

// Aplet, kter² zobrazφ samostatnΘ okno
public class SamostatneOkno extends Applet {

  // Instance novΘho okna
  MojeOkno frame;

  // Inicializace apletu
  public void init() {
    frame = new MojeOkno();                // Vytvo°enφ okna
    frame.setSize(new Dimension(400,200)); // Nastavenφ rozm∞r∙ okna
    frame.show();                          // Zobrazenφ okna
  }
}

// T°φda s definicφ samostatnΘho okna
class MojeOkno extends Frame {

  Label label1 = new Label();              // Popiska pro zobrazenφ textu

  // T°φda reagujφcφ na udßlosti vysφlanΘ oknem
  private class WindowClose implements WindowListener {
    public void windowOpened     (WindowEvent e) {}
    public void windowClosed     (WindowEvent e) {}
    public void windowIconified  (WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowActivated  (WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowClosing    (WindowEvent e) {
      dispose();                            // Zav°enφ okna
    }
  }

  // Konstruktor okna
  MojeOkno() {
    super("Moje aplikace jako samostatnΘ okno");  // Nastavenφ titulku okna
    label1.setFont(new Font("SansSerif", 1, 50)); // Vytvo°enφ popisky
    label1.setText("Moje okno!!!");
    label1.setAlignment(1);
    this.setLayout(new BorderLayout());           // Nastavenφ layout manageru
    this.add(label1, BorderLayout.CENTER);        // P°idßnφ popisky do okna
    this.addWindowListener(new WindowClose());    // Aktivace obsluhy udßlostφ

  }

}
Po p°elo₧enφ zφskßme soubor SamostatneOkno.class, kter² ji₧ m∙₧eme za°adit do strßnky jako aplet. My vÜak nechceme, aby byl p°φmo v prohlφ₧eΦi n∞jak² aplet vid∞t. To m∙₧eme snadno obejφt tφm, ₧e u apletu nastavφme nulovΘ rozm∞ry a p°esuneme ho na prav² okraj obrazovky, kde si ho nikdo nem∙₧e vÜimnout:
<HTML>
<HEAD>
<TITLE>Ukßzka strßnky, kterß vytvo°φ samostatnΘ okno v Jav∞</TITLE>
</HEAD>
<BODY>
<H1>Strßnka, ve kterΘ na prvnφ pohled nenφ aplet</H1>

<APPLET CODE="SamostatneOkno.class" 
	WIDTH=0 HEIGHT=0 HSPACE=0 VSPACE=0 ALIGN=RIGHT></APPLET>

Apletu si nejspφÜ nikdo ani nevÜimne.

</BODY>
</HTML>
V²sledek naÜeho sna₧enφ si m∙₧eme prohlΘdnout na obrßzku.
Obr.: SamostatnΘ javovΘ okno vyvolanΘ z apletu
SamostatnΘ javovΘ okno vyvolanΘ z apletu

Takto vytvo°enΘ okno z∙stane otev°enΘ i po p°echodu na jinou strßnku. Pokud bychom cht∞li okno automaticky zav°φt p°i zm∞n∞ strßnky, museli bychom ve t°φd∞ SamostatneOkno definovat metodu destroy(), kterß uvolnφ okno pomocφ frame.dispose().

Okno se samoz°ejm∞ zav°e po uzav°enφ prohlφ₧eΦe, proto₧e ten oknu poskytuje interpret Javy.

© Ji°φ Kosek 1999