Diskuze: "Komunikace" mezi třídami
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
V první řadě musíš v hlavní třídě inicializovat třídu druhou, abys
na ni mohl volat metody. A do druhé třídy napíšeš metodu, která bude
měnit proměnou int.
Můžeš se také inspirovat zdejším článkem http://www.itnetwork.cz/…nel-graphics
já to mam takhle v 1. třídě:
private int a = 8;
ve metodě s layoutem (pořád sem v první třídě):
Screen s = new Screen(a);
add(s);
A v té 2. třídě:
private int b;
public Screen(int b){
this.b = b;
}
public void paint(Graphics g){
g.drawRect(10, 10, b, b);
repaint();
}
Samozřejmě, že to není tak triviální, ale něco na tenhle způsob
(tohle sem si teď vymyslel
).
A taky mě napadlo, jestli bych do té druhé třídy neměl implementovat Runnable (vim jak se implementuje, jen se ptam, jestli je to potřeba).
Když tak nad tim přemejšlim, tak mě napadlo, že by ten Runnable měl být spíš v tý první třídě (hlavní třídě). Ale nejsem si jistej, tak se ptam.
Každopádně budu rád za jakoukoli pomoc.
Já bych to udělal takto:
V 1. třídě:
NazevDruhe nazevDruhe = new NazevDruhe();
int a=6;
private void formMouseClicked(java.awt.event.MouseEvent evt) {
nazevDruhe.setVelikost(a);
a++;
JPanel.repaint();
}
2. třída
private int a;
public void setVelikost(int a){
this.a=a;
}
public void paint(Graphics g){
g.drawRect(10, 10, a, a);
}
proč děláš nějaký vlastní tlačítko s velikostí <i>a</i>, to já nepotřebuju, mě stačí pouhej JButton.
A zajmalo by mě, jak si ty tvoje třídy vymění informaci o té proměnné.
Trochu se divím, že se ti ta tvá metoda paint() nezacyklí, když uvnitř ní voláš metodu repaint(). Funguje to tak, ze kdyz volas metodu repaint(), tak ta vola metodu update() a ta vola metodu paint(). Jinak já bych to provedl obdobně jako kolega. Informaci o promenne si tridy predaji v obsluze udalosti - v tomto případě nazevDruhe.setVelikost. A pak by stacilo zavolat nazevDruhe.repaint(). V tvem pripade by se zavolalo s.repaint().
No něco jsem zkoušel, a dokonce se mi ani ta druhá třída nechce
zobrazit.
Tak jsem to vrátil.
Vysvětlim znova:
Mam jednu třídu, kde mam metodu, která mi vykresluje JButton a mam druhou
třídu, ve kterej mam metodu piant(Graphics g) , která mi vykresluje grafiku
podle jednoho intu, kterej je deklarovanej ve druhé třídě.
Tak a já potřebuju tim jednim JButtonem v té první třídě měnit tu
hodnotu intu v té druhé třídě, a aby se mi ta grafika hned znova vykreslila
(tzn. měnila se s počtem mačkání na ten JButton).
Snad je to dost podrobný vysvětlení.
Budu rád za návrh řešení.
Přesně na tohle jsem ti odpovídal, jen jsem to popsal podle svého.
Přikládám hotový příklad, na něm by to snad mělo být lépe
pochopitelné.
http://leteckaposta.cz/766653381
Zobrazeno 10 zpráv z 10.