|
![]() |
#1 |
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 ![]() 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); } } |
![]() |
![]() |
![]() |
#2 |
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(); ![]() |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
#3 |
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. |
![]() |
![]() |
![]() |
#4 |
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 ); Bolja varijanta bi bila prebrisati već postojeće slike. |
![]() |
![]() |
![]() |
#5 |
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. |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
|
|