Problém s vykreslením cez metódu paintComponent() – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s vykreslením cez metódu paintComponent() – Java – Fórum – Programujte.comProblém s vykreslením cez metódu paintComponent() – Java – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

29. 12. 2016   #1
-
0
-

Ahojte,

robím jeden program do školy. Je to Genetický algoritmus, ktorý produkuje populácie. Všetko čo sa týka výpočtov mám už hotové ale mám problém s vykresľovaním.

Program pracuje tak že najprv náhodne vypočíta prvú populáciu a s nej postupnými úpravami počíta ďalšie. Mám zadefinované koľko vlastne generácií (opakovaní) program vykoná. Potreboval by som však aby program po výpočte nejakej populácie túto populáciu hneď aj vykreslil, mne však program najprv všetko vypočíta a potom až na konci vykresli - ale však už len poslednú populáciu.
Hodnoty, ktoré by som potreboval vykresliť sú uložené v poli poleVykresli[i] - to sa priebežne aktualizuje. Metódu pre vykreslenie som použil paintComponen­t(Graphics g). Skúšal som rôzne možnosti ako ju volať cez rapaint() v priebehu výpočtu ale nič nefunguje vždy to vykreslí až na konci. Kód je dosť rozsiahli, tak tu zatiaľ tu dávam len tu metódu pre vykreslenie.

Za každú radu dopredu ďakujem.

@Override
protected void paintComponen­t(Graphics g)
{
super.paintCom­ponent(g);

//try {
//Thread.sleep(5000);
//} catch (Exception e) {}
//synchronized (this) {
//}
g.setColor(Co­lor.darkGray);
g.drawLine(0, 275, 1000, 275);
g.drawLine(500, 0, 500, 600);

Polygon polygon = new Polygon();
int q = 0;

try
{
if (pocJedPop.equ­als(""))
{
q = 1;
} else
{
q = Integer.value­Of(pocJedPop);
}

a = (int) (Double.value­Of(intervalA) * 100);
b = (int) (Double.value­Of(intervalB) * 100);

} catch (Exception e)
{
}

for (int i = a / 5; i <= b / 5; i++)
{
polygon.addPoint(i + 500, 275 - (int) (50 * funkcia));
}

for (int i = 0; i < q; i++)
{
g.setColor(Co­lor.yellow);
int x = poleVykresli[i] / 5;
System.out.prin­t(poleVykresli[i] + ", ");
g.drawLine(x + 500, 275 - (int) (50 * funkcia), x + 500, 275);
}

g.setColor(Co­lor.red);
g.drawPolyline(po­lygon.xpoints, polygon.ypoints, polygon.npoints);
}

Nahlásit jako SPAM
IP: 213.160.169.–
gna
~ Anonymní uživatel
1253 příspěvků
30. 12. 2016   #2
-
0
-

Můžeš zkusit paintImmediately nebo volat paintComponent sám.

Ideální by bylo mít ten výpočet v jiném vlákně (nebo ho rozdělit do kroků) a neblokovat to hlavní.

Nahlásit jako SPAM
IP: 213.211.51.–
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, 6 hostů

Moderátoři diskuze

 

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