Změna proměnné v různých oknech – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Změna proměnné v různých oknech – Java – Fórum – Programujte.comZměna proměnné v různých oknech – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Noneus0
Návštěvník
5. 2. 2014   #1
-
0
-

Zdravím,

potřeboval bych poradit. Chci vytvořit program v GUI, kde když např. zmáčknu čudlík, přičte se nějaká hodnota do proměnné, která bude v mainu. Stejně tak, když nějaký čudlík  otevře nové okno, aby mělo přístup k té proměnné z mainu. Možná to vysvětluju blbě, ale snad pochopíte. Nejsem si jist, jestli se má používat extends a jestli ano, jak přesně(kde). Díky moc

Nahlásit jako SPAM
IP: 217.195.173.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
5. 2. 2014   #2
-
0
-

 Jsou dvě cesty :

- statická proměnná třídy ( může být pouze jedna  pro celou tridu), tudíž různé objekty z té samé třídy ji mají společnou

- objektová proměnná třídy ( a je k dispozici pro každý objekt(instanci) nová)

public class MainOkno{
	public static int proměnna=0;  	// staticka promenna	
	public int promenna = 0;	// objektova promenna
	public static void main(){
		.... aplikace spuštění

	}
}

přístup ke statické promenne z jinych trid je = Trida.promenna :

MainOkno.proměnna=5;     //  proměnna v tride MainOkno se bude rovna 5 

pristup k objektove je :

objekt.promenna++;

Ps. promenna vs proměnna je naschvál, dopln si vlastni nazev promenne

Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
5. 2. 2014   #3
-
+1
-
Zajímavé

#2 NotBeginner
Je dobré se statickým atributům tříd vyhnout velkým obloukem. Na začátku to vypadá jako výhoda, ale později se stanou významnou brzdou vývoje. Je lepší od počátku třídu navrhnout správně, tedy statické atributy tříd vytvářet jen tam, kde to má skutečný důvod - skoro nikdy.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBeginner
~ Anonymní uživatel
185 příspěvků
5. 2. 2014   #4
-
0
-

   

       #3 Kit

1) Noneus když má problém s předáváním proměnných v rámci tříd, myslím si že je rád za jakékoliv řešení. V jeho fázi učení programování neřeší věci typu např. zapoudření vč. getteru, setterů,

2) to je takové ošetné toto tvrdit, když víme že v některých návrhových vzorech jsou dokonce statické proměnné třídy prakticky povinné ( např. singleton,statické tovární metody, atd..).

Závěr : rozhodně bych taky nedoporučoval používat statické proměnné tříd u větších projektů ale u člověka který je začátečník tak bych to vůbec neřešil. Hlavně když mu ten program bude fungovat, pochopí rozdíl mezi objetkovou a statickou, a pak to využije u návrhových vzorů.


Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
5. 2. 2014   #5
-
0
-

#4 NotBeginner
Singleton je antipattern, neměl by se používat. Statické tovární metody vůbec nemusí obsahovat žádné proměnné, natož statické.

Řešení je k nalezení v učebnicích Javy.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Noneus0
Návštěvník
5. 2. 2014   #6
-
0
-

#2 NotBeginner
Díky moc všem. A ještě maličkost. Jak dosáhnout toho, aby se stal čudlík nezmáčknutelným? Tedy aby byl pořád vidět, ale nešel zmáčknout.

Nahlásit jako SPAM
IP: 217.195.173.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
6. 2. 2014   #7
-
0
-
Nahlásit jako SPAM
IP: 217.112.161.–
Noneus0
Návštěvník
6. 2. 2014   #8
-
0
-

#7 NotBeginner
Tudíž předpokládám, že to budu moct udělat i s celým oknem, jest tak?

Nahlásit jako SPAM
IP: 217.195.173.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
6. 2. 2014   #9
-
0
-

#8 Noneus
Pokud oknem myslíš objekt top-level kontejner  typu Frame,JFrame,Dialog,JDialog atd.. pak ano

např.

http://docs.oracle.com/javase/7/docs/api/java/awt/Frame.html

v tabulce zděděných metod je vidět že tato metoda je tomuto objekt dostupna (Methods inherited from class java.awt.Component)

Nahlásit jako SPAM
IP: 217.112.161.–
Flowy0
Věrný člen
6. 2. 2014   #10
-
0
-

#5 Kit
ak by sa nemal pouzivat singleton tak naco je teda v jave enum? enum a singleton su si celkom rovne len s tym rozdielom ze singleton je rozsiritelny narozdiel od enumu ... mozno je v tom rozdiel z pohladu vykonu ale uz len tym ze je enum v jave znamena ze singleton ako pattern je potrebny (a je to priama nahrada za enum pred javou 5)

Nahlásit jako SPAM
IP: 95.102.43.–
https://github.com/Flowy
Kit+15
Guru
6. 2. 2014   #11
-
0
-

#10 Flowy
Singleton nemá s enumem nic společného.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Noneus0
Návštěvník
6. 2. 2014   #12
-
0
-

Když mám okno č.1 s jedním čudlíkem, který po zmáčknutí otevře okno č.2, nedaří se mi, aby okno č.1 nedostupné (viz. setEnabled.) po dobu co je otevřené okno č.2. Zkrátka, aby to bylo jak když vyskočí např. varovná hláška. Ale aby šlo s oknem č.2 zacházet normálně.

Nahlásit jako SPAM
IP: 217.195.173.–
Flowy0
Věrný člen
7. 2. 2014   #13
-
0
-

#11 Kit 

public enum Singleton {
	INSTANCE;
        public void execute (String arg) {
                // perform operation here 
        }
}

This approach implements the singleton by taking advantage of Java's guarantee that any enum value is instantiated only once in a Java program. Since Java enum values are globally accessible, so is the singleton, initialized lazily by the classloader. The drawback is that the enum type is somewhat inflexible.

naopak ... maju spolocne az prilis vela

Nahlásit jako SPAM
IP: 95.102.43.–
https://github.com/Flowy
Kit+15
Guru
7. 2. 2014   #14
-
0
-

#13 Flowy
To je jen zneužívání enum k implementaci vzoru Singleton. Enum je výčtový datový typ s slouží spíš k nahrazení switch. Někomu se však hodil i k implementaci Singletonu.

Nahlásit jako SPAM
IP: 195.113.151.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
7. 2. 2014   #15
-
0
-

#12 Noneus
najdi si dokumentaciu k objektu ktory ti vytvara dane okno a pravdepodobne tam bude funkcia setEnabled aj pre toto (alebo nieco podobne ako freeze) ... ked to nastavis na hlavne okno pravdepodobne to nastavi aj na potomkov (alebo si tu metodu jednoducho vytvor a okno vytvor ako extend toho povodneho)

ale predpokladam ze info okno uz tam bude implementovane takze asi bude lepsie pouzit toto ak to nepotrebujes nejak specialne

Nahlásit jako SPAM
IP: 95.102.43.–
https://github.com/Flowy
Řešení
NotBeginner
~ Anonymní uživatel
185 příspěvků
7. 2. 2014   #16
-
0
-
Vyřešeno Nejlepší odpověď

   

      ,zde je funkční jednoduchý zdroják JFrame je deaktivovany kdyz se zobrazuje JDialog ( chlape nezvykej si na to, nechce se mi nad tím přemýšlet - přeci jenom mi to 30-60 minut zabralo )

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class OknoDialog extends JDialog {
	private static final long serialVersionUID = 8423924474776242642L;
	private D16_KontejnerFrameDialog frame;
	private void pridejTlacitka(){
		JButton tlac1 = new JButton("Zobrazi MessageDialog jiny");
		this.add(tlac1);
		tlac1.addActionListener(new Zprava());
		JButton tlac2 = new JButton("Vypne dialog");
		this.add(tlac2);	
		tlac2.addActionListener(new ZobrazDialog(this));	}
	OknoDialog(D16_KontejnerFrameDialog frame){								//	konstruktor Dialogu
		super.setTitle("Okno zase s nekolika tlacitky");
		this.frame=frame;
		this.setLocation(1000,200);
		this.setSize(400,300);
		this.getContentPane().setBackground(Color.green);
		this.setLayout(new FlowLayout());
		this.pridejTlacitka();	}
	private class Zprava implements ActionListener {						//	vnorena/vnitrni trida
		public void actionPerformed(ActionEvent arg0) {
			JOptionPane.showMessageDialog(null, " Hlaska co zase neco dela");	}	
	}
	private class ZobrazDialog implements ActionListener {					//	vnorena/vnitrni trida
		private OknoDialog dialog;
		ZobrazDialog(OknoDialog dialog){									//	konstruktor vnitrni tridy
			this.dialog=dialog;	}
		public void actionPerformed(ActionEvent e) {
			dialog.setVisible(false);
			dialog.frame.setEnabled(true);									//	OPET ZAPNEME MOZNOST KLIKAT
			dialog.frame.setVisible(true);}
	}
}
public class D16_KontejnerFrameDialog extends JFrame{
	private static final long serialVersionUID = -1995053191867011643L;
	protected OknoDialog dialog;
	private void pridejTlacitka(){
		JButton tlac1 = new JButton("Zobrazi MessageDialog");
		this.add(tlac1);
		tlac1.addActionListener(new Zprava(this));
		JButton tlac2 = new JButton("Zobrazi dialog");
		this.add(tlac2);
		tlac2.addActionListener(new ZobrazDialog(this));	}
	D16_KontejnerFrameDialog(){												//	konstruktor Frame
		super.setTitle("Okno s nekolika tlacitky");
		this.setLocation(400,200);
		this.setSize(400,200);
		this.getContentPane().setBackground(Color.red);
		this.setLayout(new FlowLayout());
		this.pridejTlacitka();	}
	private class Zprava implements ActionListener {						//	vnorena/vnitrni trida
		private D16_KontejnerFrameDialog frame;
		Zprava(D16_KontejnerFrameDialog frame){								//	konstruktor vnitrni tridy
			this.frame=frame;	}
		public void actionPerformed(ActionEvent arg0) {
			JOptionPane.showMessageDialog(frame, " Hlaska co neco dela");	}	
	}
	private class ZobrazDialog implements ActionListener {					//	vnorena/vnitrni trida
		private D16_KontejnerFrameDialog frame;
		ZobrazDialog(D16_KontejnerFrameDialog frame){						//	konstruktor vnitrni tridy
			this.frame=frame;	}
		public void actionPerformed(ActionEvent e) {
			dialog = new OknoDialog(frame);
			dialog.setVisible(true);
			frame.setEnabled(false);	}									//	VYPNEME MOZNOST KLIKAT
	}
	public static void main(String [] args){
		new D16_KontejnerFrameDialog().setVisible(true);	}
}

Příště nebuď tak abstraktní ( kdo má tušit co si pod pojmem Okno představuješ) a dávej zde části kódu lze z toho mnohem více zjistit.

Nahlásit jako SPAM
IP: 217.112.161.–
Noneus0
Návštěvník
7. 2. 2014   #17
-
0
-

#16 NotBeginner
Díky moc, moc mi to pomohlo.

Nahlásit jako SPAM
IP: 217.195.173.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

Podobná vlákna

Zmena Proměnné — založil Killercek

Změna proměnné v cyklu — založil Keyzio

Změna proměnné v def — založil Pavel Kurc

Změna proměnné pro FOREACH — založil Provox

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý