[JAVA] Beginnersvraag: jlabel wordt niet gerepaint

Pagina: 1
Acties:

  • Brabrabra
  • Registratie: Januari 2002
  • Laatst online: 28-01 07:00

Brabrabra

Chaoss ahv

Topicstarter
Ik ben hier al een paar uren mee bezig, op GOT en Google gezocht, maar geen oplossing gevonden...

In een programma wat ik aan het maken ben wil ik de voortgang laten zien in een label.
In de functie schrijfUitvoer heb ik label.setText("Voortgang: " + vg); staan.
Als ik dan de waarde van het label controleer met System.out.print, dan is hij bijgewerkt, maar op het scherm staat nog de oude waarde. Of ik wel of niet label.repaint doe maakt niet uit.
In actionPerformed() werkt de setText wel.

Kan iemand me vertellen hoe ik het werkend krijg?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class XMLgenerator implements ActionListener
{
final JLabel label = new JLabel("Voortgang: 0%");

public Component createComponents()
{
JButton button = new JButton("Klik");
button.setMnemonic(KeyEvent.VK_I);
button.addActionListener(this);
label.setLabelFor(button);
JPanel pane = new JPanel(new GridLayout(0, 1));
pane.add(button);
pane.add(label);
pane.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));
return pane;
}

public void actionPerformed(ActionEvent e)
{
numClicks++;
label.setText("Voortgang: " + numClicks+"%");
}

public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
  {
  public void run()
    {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("XMLgenerator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    XMLgenerator app = new XMLgenerator();
    Component contents = app.createComponents();

    frame.getContentPane().add(contents, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
    XMLgenerator bestand = new XMLgenerator();
    bestand.schrijfUitvoer("vdwerf.xml",array);
    }
  });
}


public boolean schrijfUitvoer(String bestandsnaam, String[][] arruit)
{
int totaalrecords=100;
for (int k=1;k<totaalrecords+1;k++)
  {
  //DOE VANALLES
  try
    {
    float eenprocent=totaalrecords/100f;
    float vg= Math.round((k/eenprocent)*100f)/100f;
    label.setText("Voortgang: " + vg);
    label.repaint();
    System.out.print(label.getText()+"\n");
    } catch (IOException e)
    {
    System.err.println(e.getMessage());
    return false;
    }
  }
return true;
}


Alvast bedankt ;)

Supergrover heeft een vogeltje gered. Dat vogeltje zat heel hoog in een boom en durfde niet naar beneden te klimmen!


  • Maxxi
  • Registratie: Mei 2004
  • Laatst online: 21-11-2025
probeer eens niet alleen label.repaint()
maar panel.repaint() (ookwel this.repaint())
en weet je zeker dat er geen lokale variable "label" is?

Edit: en plz werk met tabs dit is nauwlijks te lezen.

[ Voor 16% gewijzigd door Maxxi op 29-09-2006 14:08 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 17:08

momania

iPhone 30! Bam!

Het updaten van je UI gebeurt nu indezelfde thread als waar je procesjes loopt. Het uiteindelijke updaten gebeurt pas als je proces klaar is, vandaar dat je niks ziet ;)

Voortgangs updates naar de UI zal je moeten doen door je 'proces' in een aparte thread te laten lopen. :)

Neem je whisky mee, is het te weinig... *zucht*


  • Brabrabra
  • Registratie: Januari 2002
  • Laatst online: 28-01 07:00

Brabrabra

Chaoss ahv

Topicstarter
Maxxi schreef op vrijdag 29 september 2006 @ 14:07:
probeer eens niet alleen label.repaint()
maar panel.repaint() (ookwel this.repaint())
en weet je zeker dat er geen lokale variable "label" is?

Edit: en plz werk met tabs dit is nauwlijks te lezen.
panel en this.repaint kent hij niet in schrijfUitvoer(). Sorry, ik ben een noob met JAVA en heb al geprobeerd om die panel te verplaatsen zodat hij hem wel kent, maar dat lukte ook niet...

label wordt in het hele programma maar 1x gedeclareerd.

[ Voor 5% gewijzigd door Brabrabra op 29-09-2006 14:14 ]

Supergrover heeft een vogeltje gered. Dat vogeltje zat heel hoog in een boom en durfde niet naar beneden te klimmen!


  • Maxxi
  • Registratie: Mei 2004
  • Laatst online: 21-11-2025
ipv panel.repaint()
frame.getContentPane().repaint()

meestal(niet altijd) maken mensen een aparte variable aan voor een panel. Jij doet dit niet.
Is opzich niet verkeert, maar minder handig.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:39

TeeDee

CQB 241

Wat momania zegt: werk met aparte threads.
Je UI zal nu 'vast' staan totdat je process (actionPerformed) klaar is.

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1