Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

Ahojte,

prosím vás potreboval by som poradiť s GUI v Jave, mám taký problém, že prekrývam metódu paint(Graphics g) pri vytvárani okna sa mi tlačidlá na spodu okna nezobrazia zobrazia sa až keď myšou prejdem po mieste na ktorom by mali byť tie tlačidlá viditeľné, snažil som sa pogooglovať čo to šlo, prešiel som celý Java help pre tieto komponenty a všetko márne.
Ak použijem metódu painComponent tak mi komponenty a všetko vykreslí ale nejde mi kresliť obrazce na plochu a naozaj si už s tým neviem rady.
Budem vďačný za každú radu
Vďaka

 
Odpovědět 9.5.2015 20:29
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

Oprava,

podarilo sa mi to spojazdniť takým spôsobom, že sa mi dá kresliť na plochu aj pri metóde paintComponent. Nijakým spôsobom sa mi však nepodarilo docieliť toho aby som mal obrace vykreslené hneď ako sa okno spustí... predtým som volal kreslenie už v konštruktore pretože po otvorení okna už potrebujem mať pripravenú hraciu plochu, pri metóde paint to bežalo, pri painComponent akékoľvek kreslenie v konštruktore jednoducho nevykreslí, musím ho aktualizovať klikom alebo niečím na čo to kreslenie bude reagovať... Mohol by som to vyriešiť pridaním ešte jedného buttonu - "Začať hru" ale predsa len keď už som si vybral rozmery formu hry a všetko tak očakávam, že hra bude dostupná hneď po spustení... Ak by niekto vedel ako by sa to dalo vyrieši bol by som naozaj vďačný

 
Nahoru Odpovědět 10.5.2015 8:55
Avatar
Petr Štechmüller:

Ahoj, bez kódu ti asi nikdo nepomůže. Můžeš sem hodit kód, kde sestavuješ okno, vytváříš gui a metodu paint?

Nahoru Odpovědět 10.5.2015 9:20
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

Pridal som ich takto cez obrázky, nevedel som ako ináč nato, je tam toho kódu žiaľ veľmi veľa, metódu paintComponent mám prázdnu a kreslenie robím mimo, keď som to robil vnútri tak mi to nekreslilo vôbec, je tam aj obrázok okna... po sputení sa mi však nezobrazí tá mriežka musím kliknúť a až potom kreslí ak to mám v konštruktore nič sa nestane

 
Nahoru Odpovědět 10.5.2015 9:32
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

zobrazilo vám tie súbory ?

Editováno 10.5.2015 9:33
 
Nahoru Odpovědět 10.5.2015 9:33
Avatar
Odpovídá na eraz.gajdos
Petr Štechmüller:

Žádné soubory se nezobrazily, použij dole odkaz na vložení dlouhého zdrojového kódu.

Nahoru Odpovědět 10.5.2015 9:38
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

http://www.itnetwork.cz/dev-lighter/576
http://www.itnetwork.cz/dev-lighter/577

pridal som to ako zdrojáky mám ich však niekde ako keby v profile, neviem či vám tieto linky otvorí, opsravedlňujem sa som tu nový tak neviem ako to funguje

 
Nahoru Odpovědět 10.5.2015 9:39
Avatar
Odpovídá na eraz.gajdos
Petr Štechmüller:

Co jsem tak z kódu pochopil, tak se snažíš kreslit na JPanel platno. Vytvoř si nový objekt třeba mujPanel který bude dědit právě z JPanelu. V něm překryj metodu paint() svým vlastním kreslením (nezapomeň zavolat super.paint()). Nakonec přidej panel do formuláře. Když to teď spustíš, měl by jsi rovnou vidět kreslení.

Nahoru Odpovědět 10.5.2015 10:22
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

A nebude mi to robiť ten problém čo na začiatku ? ja som to najskôr kreslil cez metódu paint() ale tá spôsobovala to, že prekreslila celú plochu a buttony na spodnej lište sa mi zobrazovali len ak som na ne nabehol myšou, preto som to začal riešiť cez paintComponent, ak to spravím takto tak to nebude v podsate o tom istom ? pretože vtedy som tiež videl kreslenie hneď ale buttony na spodnej lište sa mi akoby prekreslili a nebolo ich vidno

 
Nahoru Odpovědět 10.5.2015 10:30
Avatar
Odpovídá na eraz.gajdos
Petr Štechmüller:

Problem to dělat nebude, sám jsem to vyzkoušel. Tady máš přesný návod jak na to:

1. Vytvoříš novou třídu MujPanel kde překryješ metodu paint svým kreslením:

public class MujPanel extends JPanel {

    @Override
    public void paint(Graphics g) {
        super.paint(g);

        g.drawLine(50, 50, 100, 100);
    }
}

2. V metodě StrednaObtiaznost() zakomentuješ vše, co se týká JPanel blatno a místo toho tam vytvoříš MujPanel:

public void StrednaObtiaznost(String title, int riadky, int stlpce) {
   ...
   // Tento řádek zakomentuj
   // JPanel platno = new JPanel(new BorderLayout());
   // Místo něj vytvoříš instanci třídy MujPanel:
   MujPanel mujPanel = new MujPanel();

   // Nakonec pridáš mujPanel do JFramu:
   this.add(mujPanel);

Tohle by mělo stačit na to, aby ti to vykreslilo čáru na plátno hned po zapnutí aplikace.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 10.5.2015 10:41
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
eraz.gajdos
Člen
Avatar
eraz.gajdos:

Ďakujem veľmi pekne :) všetko funguje ako má, veľmi si mi pomohol :)

 
Nahoru Odpovědět 10.5.2015 10:55
Avatar
Odpovídá na eraz.gajdos
Petr Štechmüller:

Není vůbec zač. Ještě můžeš můj poslední příspěvek označit jako řešení pro ostatní.

Nahoru Odpovědět 10.5.2015 10:59
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
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 12 zpráv z 12.