» »

[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:

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:

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

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

java, Swing in vmesnik ActionListener

Oddelek: Programiranje
5681 (618) marjan_h
»

java pomoč, verjetno event handler

Oddelek: Programiranje
121055 (888) Chandler258
»

[java] opcijsko okno

Oddelek: Programiranje
102074 (1855) infiniteLoop
»

[Java] Deljenje in ostanek

Oddelek: Programiranje
143091 (2675) pr2501
»

[NALOGA][Java] Težave pri pisanju slikarja

Oddelek: Programiranje
202290 (1932) l0g1t3ch

Več podobnih tem