[java] strings samenvoegen & pauze

Pagina: 1
Acties:
  • 307 views sinds 30-01-2008
  • Reageer

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Om veel typwerk te besparen wil ik graag door middel van een for loop teksten van elementen instellen. Hiervoor moet ik echter strings samenvoegen. Kan iemand me zeggen wat er mis is met de volgende code?
code:
1
2
int i = 1; 
("map" + String.valueOf(i)).setText("");



Bovendien trachtte ik een pauze in te voegen met de volgende code:
code:
1
2
3
4
5
display.setText("blaat");
Thread.currentThread().sleep(5000);
   }
   catch(InterruptedException e){
   }

Het probleem is dat de hele method gepauzeerd wordt, de voorgaande regel(s) (display.setText("blaat");) wordt pas na de pauze uitgevoerd. Ik wil echter dat eerst de voorgaande regels worden uitgevoerd en daarna pas de pauze. Iemand een idee wat ik verkeerd doe?

"We do not first see, then define, we define first and then see" (Lippmann)


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

In je eerste geval: je wilt voor meerdere i's map_i.setText() aanroepen? Dus map0.setText(""), map1.setText(""), etc?

Dan gaat het zeker niet wat je wilt. Wat je creeert zijn niet referenties naar variabelen, maar strings.
Je noemt die maps (is dat een (J)Label?) al met een i, dus waarom niet een array gebruiken?
Dus ipv
Java:
1
2
3
<maptype> map0 = new <maptype>;
<maptype> map1 = new <maptype>;
...
doe je
Java:
1
2
3
4
5
<maptype>[] maps = new <maptype>[aantal];
for (int i = 0; i < aantal; i++)
{
    maps[i] = new <maptype>;
}
Die setTexts gaat dan hetzelfde:
Java:
1
2
3
4
for (int i = 0; i < maps.length; i++)
{
    maps[i].setText("");
}

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Wat doe ik nou verkeerd? ik krijg het niet werkend ("illegal start of type") (moet toch gewoon in de class?)
code:
1
2
3
4
5
6
private int aantal = 10;
private JTextPane[] maps = new JTextPane[aantal]; 
for(int i = 0; i < aantal; i++) 
{ 
    maps[i] = new JTextPane; 
}

code:
1
2
3
4
5
6
int aantal = 10;
JTextPane[] maps = new JTextPane[aantal]; 
for(int i = 0; i < maps.length; i++) 
{ 
    maps[i] = new JTextPane(); 
}

Werkt ook niet

[ Voor 27% gewijzigd door MrDirk op 08-03-2004 15:54 ]

"We do not first see, then define, we define first and then see" (Lippmann)


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
code:
1
2
3
4
5
6
int aantal = 10;
JTextPane[] maps = new JTextPane[aantal]; 
for(int i = 0; i < maps.length; i++) 
{ 
    maps[i] = new JTextPane(); 
}

[ Voor 7% gewijzigd door vogeltje op 08-03-2004 15:49 ]

binnenkort een hele dikke casemod :P


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 24-05 20:08
je bent een () vergeten.

edit:
Te laat :.

[ Voor 37% gewijzigd door Dash2in1 op 08-03-2004 15:49 ]


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
MrDirk schreef op 08 maart 2004 @ 15:46:
Wat doe ik nou verkeerd? ik krijg het niet werkend ("illegal start of type") (moet toch gewoon in de class?)
code:
1
2
3
4
5
6
private int aantal = 10;
private JTextPane[] maps = new JTextPane[aantal]; 
for(int i = 0; i < aantal; i++) 
{ 
    maps[i] = new JTextPane; 
}

code:
1
2
3
4
5
6
int aantal = 10;
JTextPane[] maps = new JTextPane[aantal]; 
for(int i = 0; i < maps.length; i++) 
{ 
    maps[i] = new JTextPane(); 
}

Werkt ook niet
Als ik je eerste stuk code bekijk krijg ik het idee dat je for-lus niet in een methode/constructor staat.

[ Voor 3% gewijzigd door Amras op 08-03-2004 16:09 ]


  • kim72
  • Registratie: Oktober 2001
  • Laatst online: 15-03 16:41
Over het updaten na de pauze:
Ik neem aan dat je Swing gebruikt (ziet er wel naar uit als ik naar de voorbeelden kijk). Als je een setText("blaat") doet op een Swing component dan wordt hier een update-event van gemaakt dat in een queue gezet wordt. Deze queue wordt pas weer uitgelezen op het moment dat jou eventhandler klaar is.

In jouw geval is de tekst intern dus al wel aangepast voor de pauze, maar is het scherm nog niet bijgewerkt omdat dat pas na afloop van je method gebeurt.

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
kim72 schreef op 08 maart 2004 @ 16:17:
In jouw geval is de tekst intern dus al wel aangepast voor de pauze, maar is het scherm nog niet bijgewerkt omdat dat pas na afloop van je method gebeurt.
Hoe kan ik het dan zo krijgen dat die tijdens het draaien van de method al update?

Bedankt voor de hulp met het array, het is me gelukt!!

"We do not first see, then define, we define first and then see" (Lippmann)


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Ik weet niet zeker of het werkt, maar probeer eens SwingUtilities.updateComponentTreeUI(Component)

Edit: volgens mij niet dus

[ Voor 7% gewijzigd door Robtimus op 09-03-2004 13:38 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Check de reply van harry13131.

Als je een heftige berekening loopt uit te voeren (bv meer dan 1 seconde rekentijd), dan doe je er verstandiger aan om een thread hiervoor te gebruiken, en dan kan je onder het draaien van die dikke berekening events doorsturen naar een component/eventqueue. Hierdoor voelt je gui ook snappy aan ipv dat het ineens niet meer responsive is. Foxtrot is trouwens een fijne library om met threads en swing te werken. Jammer dat er nog steeds geen semimodaldialog beschikbaar is.
Pagina: 1