IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: "Komunikace" mezi třídami

Aktivity
Avatar
Tomhaus
Člen
Avatar
Tomhaus:11.12.2014 17:54

Ahojky,

mam jeden projekt, kde mam dvě třídy. V té první mam GUI (tlačítka, atd.) a v té druhé mam jeden komponent do toho GUI, kterej má metodu paint(Graphics g). A já bych potřeboval, aby se mi, když zmáčknu tlačítko (v GUI), změnil v té druhé třídě jeden int (prostě nějaký číslo, který je základem pro paint).

Jak se dá takováhle "komunikace" realizovat?

Díky za jakoukoli odpověď.

Odpovědět
11.12.2014 17:54
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Contrix
Tvůrce
Avatar
Contrix:11.12.2014 18:41

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

Nahoru Odpovědět
11.12.2014 18:41
Jsou zloději, které zákon netrestá, třebaže kradou člověku to nejcennější čas.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Contrix
Tomhaus:11.12.2014 20:29

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 :D ).

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

Editováno 11.12.2014 20:31
Nahoru Odpovědět
11.12.2014 20:29
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Contrix
Tomhaus:11.12.2014 20:34

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

Nahoru Odpovědět
11.12.2014 20:34
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Contrix
Tvůrce
Avatar
Contrix:11.12.2014 21:06

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);
}
Editováno 11.12.2014 21:08
Nahoru Odpovědět
11.12.2014 21:06
Jsou zloději, které zákon netrestá, třebaže kradou člověku to nejcennější čas.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Contrix
Tomhaus:11.12.2014 21:30

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

Nahoru Odpovědět
11.12.2014 21:30
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar

Člen
Avatar
Odpovídá na Tomhaus
:12.12.2014 11:12

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.set­Velikost. A pak by stacilo zavolat nazevDruhe.re­paint(). V tvem pripade by se zavolalo s.repaint().

 
Nahoru Odpovědět
12.12.2014 11:12
Avatar
Tomhaus
Člen
Avatar
Odpovídá na
Tomhaus:12.12.2014 16:09

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

Editováno 12.12.2014 16:11
Nahoru Odpovědět
12.12.2014 16:09
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Avatar
Contrix
Tvůrce
Avatar
Contrix:12.12.2014 17:27

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

Nahoru Odpovědět
12.12.2014 17:27
Jsou zloději, které zákon netrestá, třebaže kradou člověku to nejcennější čas.
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Contrix
Tomhaus:12.12.2014 20:09

díky za trpělivost, už mi to funguje :)

Nahoru Odpovědět
12.12.2014 20:09
Být lepší a chytřejší je důležité, ale někdy se musíme spokojit s tím, co máme.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.