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.
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.