Diskuze: "Komunikace" mezi třídami

Java Java "Komunikace" mezi třídami

Avatar
Tomhaus
Člen
Avatar
Tomhaus:

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
Redaktor
Avatar
Contrix:

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:

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:

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
Redaktor
Avatar
Contrix:

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:

proč děláš nějaký vlastní tlačítko s velikostí a, 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
Tomek
Člen
Avatar
Odpovídá na Tomhaus
Tomek:

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
"Jak nahoře, tak dole. Jak uvnitř, tak vně."
Avatar
Tomhaus
Člen
Avatar
Odpovídá na Tomek
Tomhaus:

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
Redaktor
Avatar
Contrix:

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:

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.