Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 02.07.2011., 16:58   #1
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Problem u javi - gumb se prikaže tek nakon minimize ili reszize

Radim jedan program u javi s poker kartama i imam 2 problema:

1. Imam 5 slika koje predstavljaju pozadinu karata i onda kad se klikne gumb generiraj, stvori se 5 random karata. Problem je što se one ne stvore kad kliknem gumb nego tek nakon što napravim minimize prozora ili kliknem na rub prozora.

2. Kad ponovno kliknem gumb generiraj, karte se ne žele ponovo generirat.

Evo kod iz glavne klase pa ako netko vidi problem (znam da ima puno grešaka i boljih načina, ali neznam bolje ). Što se tiče actionlistenera ovakav kod sam koristio kad sam radio kalkulator i bilo mi je sve ok...
Također oko teksta na gumbu "generiraj random karte" je pravokutnik, dok mi na gumbima na kalkulatoru toga nema...

...
public class Main extends JFrame {

private static final long serialVersionUID = 1L;

public static void main(String[] args) {

final JFrame okvir = new JFrame("Evaluacija poker ruku");

okvir.setLayout(new SpringLayout());
okvir.setPreferredSize(new Dimension(780, 652));

final JButton generiraj = new JButton();
generiraj.setText("Generiraj random karte");

ImageIcon back = new ImageIcon ("Karte/back.gif");


final JButton prva = new JButton();
prva.setIcon(back);
final JButton druga = new JButton();
druga.setIcon(back);
final JButton treca = new JButton();
treca.setIcon(back);
final JButton cetvrta = new JButton();
cetvrta.setIcon(back);
final JButton peta = new JButton();
peta.setIcon(back);

okvir.add (new JLabel());
okvir.add (generiraj, new SpringLayout.Constraints(Spring.constant(20), Spring.constant(20), Spring.constant(200), Spring.constant(40)));
okvir.add (prva, new SpringLayout.Constraints(Spring.constant(10), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (druga, new SpringLayout.Constraints(Spring.constant(160), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (treca, new SpringLayout.Constraints(Spring.constant(310), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (cetvrta, new SpringLayout.Constraints(Spring.constant(460), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (peta, new SpringLayout.Constraints(Spring.constant(610), Spring.constant(80), Spring.constant(140), Spring.constant(196)));

okvir.pack();
okvir.setVisible(true);


class GenerirajListener implements ActionListener {
public void actionPerformed (ActionEvent e){

final List<Karta> spil = new ArrayList<Karta>();

String snagaTemp = null;
String bojaTemp = null;
String k = null;

for (int i = 1; i<5; i++){

for (int j = 2; j<14; j++){

Karta karta = new Karta(j, i, null);

switch( i ) {
case 1: bojaTemp = "s"; break;
case 2: bojaTemp = "d"; break;
case 3: bojaTemp = "h"; break;
case 4: bojaTemp = "c"; break;
}

switch( j ) {
case 2: snagaTemp = "2"; break;
case 3: snagaTemp = "3"; break;
case 4: snagaTemp = "4"; break;
case 5: snagaTemp = "5"; break;
case 6: snagaTemp = "6"; break;
case 7: snagaTemp = "7"; break;
case 8: snagaTemp = "8"; break;
case 9: snagaTemp = "9"; break;
case 10: snagaTemp = "T"; break;
case 11: snagaTemp = "J"; break;
case 12: snagaTemp = "Q"; break;
case 13: snagaTemp = "K"; break;
case 14: snagaTemp = "A"; break;
}

k = "Karte/"+snagaTemp+bojaTemp+".gif";
karta.setImg(k);

spil.add(karta);

}

}

Collections.shuffle(spil);

ImageIcon generirana1Icon = new ImageIcon (spil.get(0).getImg());
ImageIcon generirana2Icon = new ImageIcon (spil.get(1).getImg());
ImageIcon generirana3Icon = new ImageIcon (spil.get(2).getImg());
ImageIcon generirana4Icon = new ImageIcon (spil.get(3).getImg());
ImageIcon generirana5Icon = new ImageIcon (spil.get(4).getImg());

final JButton prvaGenerirana = new JButton();
prvaGenerirana.setIcon(generirana1Icon);
final JButton drugaGenerirana = new JButton();
drugaGenerirana.setIcon(generirana2Icon);
final JButton trecaGenerirana = new JButton();
trecaGenerirana.setIcon(generirana3Icon);
final JButton cetvrtaGenerirana = new JButton();
cetvrtaGenerirana.setIcon(generirana4Icon);
final JButton petaGenerirana = new JButton();
petaGenerirana.setIcon(generirana5Icon);

okvir.remove(prva);
okvir.remove(druga);
okvir.remove(treca);
okvir.remove(cetvrta);
okvir.remove(peta);

okvir.add (prvaGenerirana, new SpringLayout.Constraints(Spring.constant(10), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (drugaGenerirana, new SpringLayout.Constraints(Spring.constant(160), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (trecaGenerirana, new SpringLayout.Constraints(Spring.constant(310), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (cetvrtaGenerirana, new SpringLayout.Constraints(Spring.constant(460), Spring.constant(80), Spring.constant(140), Spring.constant(196)));
okvir.add (petaGenerirana, new SpringLayout.Constraints(Spring.constant(610), Spring.constant(80), Spring.constant(140), Spring.constant(196)));

}
}

GenerirajListener gl = new GenerirajListener();
generiraj.addActionListener(gl);


}

}
ZMAJ je offline   Reply With Quote
Staro 03.07.2011., 11:49   #2
burki
Umalo Premium
 
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
Pozdrav!
Pozovi samo kada želiš da ti se vidi promjena u sučelju
Code:
okvir.repaint();
A ovo generiranje više puta probaj riješiti tako da se prvo maknu karte ako ih ima i onda samo postaviš.
burki je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 03.07.2011., 12:46   #3
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Probao sam već sa repaint, ali se onda samo makne pozadina karata i opet moram stisnut rub prozora da bi se karte prikazale.

EDIT:

Uspio sam sa validate->invalidate->validate.

Sljedeći problemi su što mi svakom generacijom memorija javaw.exe u task manageru raste. Trebao bi nekako valjda pobrisat prošle kombinacije? Osim toga, nakon što ugasim prozor, javaw.exe je i dalje aktivan u task manageru sve dok ne zgasim eclipse.
Također nakon što se napravi nova kombinacija karata i dođem mišem preko nove karte, pokaže se karta iz stare kombinacije (nešto slično kao rollover, samo što onda ta stara karta ostane nakon što maknem cursor). Pretpostavljam da ako uspijem riješit onaj problem sa memorijom onda će se riješit i ovaj sa prikazom karte

Zadnje izmijenjeno od: ZMAJ. 03.07.2011. u 13:25.
ZMAJ je offline   Reply With Quote
Staro 03.07.2011., 13:54   #4
burki
Umalo Premium
 
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
Da bi se aplikacija prestala izvoditi kada se pritisne x potrebno je dodati:
Code:
okvir.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Za oslobađanje memorije možeš postaviti slike na null i pozvati System.gc().
Bolja varijanta bi bila prebrisati već postojeće slike.
burki je offline   Reply With Quote
Staro 03.07.2011., 16:20   #5
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Micao sam slike nakon svakog validate pa invalidate i sad je sve ok. Mislim da je to to... hvala.
ZMAJ je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na