Forum » Programiranje » [Java]Zapiranje JFrame-ov
[Java]Zapiranje JFrame-ov
jeryslo ::
Imam aplikacijo, kjer uporabnik z pritiskom na gumb odpre novo okno. Za to novo okno kreiramo objekt razreda IzbiraSlike, ta razred namreč extend-a JFrame. To naredim takole:
Za ta objekt-izbira(JFrame) določim za setDefaultCloseOperation DISPOSE_ON_CLOSE, kar pomeni, da ko bo uporabnik zaprl okno, ki se mu je odprlo z klikom na gumb, potem bo osnovno okno ostalo odprto. To vse dela, problem nastane, ko hočem jaz to lastnost dodat gumbu na katerega uporabnik klikne za izhod. Torej mislim dodaten gumb, ne default križec desno zgoraj.
V razredu IzbiraSlike imam le-ta gumb takole definiran:
In še funkcija actionPreformed:
Tukaj pa zdaj nastane problem. Ne vem namreč kako naj dodam gumbu to lastnost da sproži zaprtje okna brez da bi se zaprlo osnovno okno(JFrame.DISPOSE_ON_CLOSE).
Poskušal sem že tudi s temle:
Vendar mi zapre oba frame-a, kar je posebi logično, ker uporabljam za popolni izhod iz aplikacije:
Any ideas?
IzbiraSlike izbira = new IzbiraSlike(width, height); izbira.buildUI1(); izbira.setSize(400,500); izbira.setTitle("Izbiranje slike"); izbira.setLocation(width/4, height/4); izbira.setVisible(true); izbira.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Za ta objekt-izbira(JFrame) določim za setDefaultCloseOperation DISPOSE_ON_CLOSE, kar pomeni, da ko bo uporabnik zaprl okno, ki se mu je odprlo z klikom na gumb, potem bo osnovno okno ostalo odprto. To vse dela, problem nastane, ko hočem jaz to lastnost dodat gumbu na katerega uporabnik klikne za izhod. Torej mislim dodaten gumb, ne default križec desno zgoraj.
V razredu IzbiraSlike imam le-ta gumb takole definiran:
izhod = new JButton("<html><body style=font-size:12px>Izhod</body></html>"); izhod.addActionListener(this);
In še funkcija actionPreformed:
public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if(source == izhod) { setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }
Tukaj pa zdaj nastane problem. Ne vem namreč kako naj dodam gumbu to lastnost da sproži zaprtje okna brez da bi se zaprlo osnovno okno(JFrame.DISPOSE_ON_CLOSE).
Poskušal sem že tudi s temle:
System.exit(JFrame.DISPOSE_ON_CLOSE);
Vendar mi zapre oba frame-a, kar je posebi logično, ker uporabljam za popolni izhod iz aplikacije:
System.exit(0)
Any ideas?
- spremenil: jeryslo ()
Nuke_H2 ::
public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if(source == izhod) { this.dispose(); //ime okna.dispose(); } }
Tole bo delalo.
Zgodovina sprememb…
- spremenil: Nuke_H2 ()
jeryslo ::
Najlepša hvala, drugače pa nisem vedel da obstaja ta metoda. Pa še nekaj bi imel za vprašat, namreč malo me muči tole dogodkovno programiranje. Imam definiran razred zraven glavnega razreda:
V razredu StormAlarm ustvarim objekt tega zgornjega razreda:
Zdaj bi pa rad v razredu IzbiraSlike, ko uporabnik klikne gumb spremenil sliko v prejšnjem JFrame-u. To sem poskušal narediti na tale način:
Torej ustvarim objekt razreda StormAlarm, nato pa kličem funkcijo getImage, kjer dobim sliko iz URL naslova. Do tu je še vse lepo in prav, toda ko kličem funkcijo spremeniSliko:
Kjer še enkrat ustvarim objekt razreda RSlika, toda tokrat je parameter druga slika. Torej po pravem bi se morala zdaj nova slika prikazati čez tastaro, toda se ne. Predvsem dvomim v mojo pravilnost uporabe objekta tipa StormAlarm?
Nobene ideje kako bi rešil to zagato?
Nobene ideje kako bi rešil ta problem?
class RSlika extends JPanel { private Image img; public RSlika(Image img) { this.img = img; } public void paint(Graphics g) { super.paint(g); Dimension d = getSize(); Insets i = getInsets(); g.drawImage(img, i.left + 2, i.top + 2, d.width - i.left - i.right - 4, d.height - i.top - i.bottom - 4, this ); } }
V razredu StormAlarm ustvarim objekt tega zgornjega razreda:
RSlika leva = new RSlika(img); leva.setPreferredSize(new Dimension(700, 0)); leva.setBorder(zamik1); leva.setLayout(new BoxLayout(leva, BoxLayout.X_AXIS)); addBorder1(barvaDebelina, leva); getContentPane().add(leva, BorderLayout.WEST);
Zdaj bi pa rad v razredu IzbiraSlike, ko uporabnik klikne gumb spremenil sliko v prejšnjem JFrame-u. To sem poskušal narediti na tale način:
public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if(source == izhod) { this.dispose(); } else if(source == radarCRO) { StormAlarm objekt2 = new StormAlarm(); objekt2.getImageCRO(); objekt2.spremeniSliko(); objekt2.repaint(); } }
Torej ustvarim objekt razreda StormAlarm, nato pa kličem funkcijo getImage, kjer dobim sliko iz URL naslova. Do tu je še vse lepo in prav, toda ko kličem funkcijo spremeniSliko:
public void spremeniSliko() { RSlika leva = new RSlika(img); leva.setPreferredSize(new Dimension(700, 0)); leva.setBorder(zamik1); leva.setLayout(new BoxLayout(leva, BoxLayout.X_AXIS)); addBorder1(barvaDebelina, leva); getContentPane().add(leva, BorderLayout.WEST); }
Kjer še enkrat ustvarim objekt razreda RSlika, toda tokrat je parameter druga slika. Torej po pravem bi se morala zdaj nova slika prikazati čez tastaro, toda se ne. Predvsem dvomim v mojo pravilnost uporabe objekta tipa StormAlarm?
Nobene ideje kako bi rešil to zagato?
Nobene ideje kako bi rešil ta problem?
Zgodovina sprememb…
- spremenil: jeryslo ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | java, Swing in vmesnik ActionListenerOddelek: Programiranje | 681 (618) | marjan_h |
» | java pomoč, verjetno event handlerOddelek: Programiranje | 1055 (888) | Chandler258 |
» | [java] opcijsko oknoOddelek: Programiranje | 2074 (1855) | infiniteLoop |
» | [Java] Deljenje in ostanekOddelek: Programiranje | 3091 (2675) | pr2501 |
» | [NALOGA][Java] Težave pri pisanju slikarjaOddelek: Programiranje | 2290 (1932) | l0g1t3ch |