Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA]Repaint forceren

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

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Ik ben bezig met een opdrachtje voor mijn studie (LOI Informatica) en loop tegen een probleempje aan, wat voor de guru's hier waarschijnlijk zo op te lossen is.

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package kreta;

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;


public class Kreta extends JApplet {
    
    public JPanel buttonPanel; 
    public JPanel contentPanel;
    public JPanel mainPanel;
    
    private Vector vecMeals;
    private Menu   menu;

    public Kreta() {
        menu = new Menu();
        mainPanel = new JPanel();
        contentPanel = new JPanel();
        vecMeals = new Vector();
    }
    
    public void createButtonPanel() {
        buttonPanel = new JPanel();
        
        JButton btnMealList = new JButton("Gerecht overzicht");
        JButton btnAddMeal  = new JButton("Gerecht toevoegen");
        
        btnMealList.addActionListener(new btnMealList());
        btnAddMeal.addActionListener(new btnAddMeal());
        buttonPanel.add(btnMealList);
        buttonPanel.add(btnAddMeal);
    }
    
    public void createMealListPanel() {
        vecMeals = menu.getAllMeals();
        
        JList mealList = new JList(vecMeals);
        contentPanel.removeAll();
        contentPanel.add(mealList);
        
        repaint();
    }
    
    public void addMealPanel() {
        contentPanel.removeAll();
        contentPanel.add(new JLabel("test"));
        
        paintFrame();
    }
    
    public void init() {        
        // create panels
        createButtonPanel();    
        createMealListPanel();
        
        paintFrame();
    }
    
    public void paintFrame() {      
        mainPanel.removeAll();
        
        // add panels to the main panel
        mainPanel.add(new JLabel("Receptoverzicht"), BorderLayout.NORTH);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
        mainPanel.add(contentPanel, BorderLayout.CENTER);
        
        mainPanel.invalidate();
        // add mainPanel to the applet
        getContentPane().add(mainPanel);
        getContentPane().invalidate();
        getContentPane().repaint();
    }
    
    public class btnMealList implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            createMealListPanel();
        }
    }
    
    public class btnAddMeal implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            addMealPanel();
        }
    }

}


Standaard krijgt men bij opening dit scherm te zien:

Afbeeldingslocatie: http://home.kabelfoon.nl/~pderaaij/prog1.jpg

Als men dan op de knop gerecht toevoegen drukt zou je nu test in beeld moeten krijgen, maar je krijgt dit:

Afbeeldingslocatie: http://home.kabelfoon.nl/~pderaaij/prog2.jpg

Als ik iets aan de grootte verander krijg ik wel een volledige repaint en krijg je wat ik direct wil:
Afbeeldingslocatie: http://home.kabelfoon.nl/~pderaaij/prog3.jpg

Mijn vraag is dus: hoe forceer ik een volledige repaint? Ik heb al geprobeerd:

mainPanel.invalidate();
mainPanel.repaint();
getContentPane().invalidate();
getContentPane().repaint();

maar dat werkt ook niet... iemand hier ideeën??

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
pderaaij schreef op zaterdag 20 oktober 2007 @ 14:07:
Ik ben bezig met een opdrachtje voor mijn studie (LOI Informatica) en loop tegen een probleempje aan, wat voor de guru's hier waarschijnlijk zo op te lossen is.
Nou, dat lijkt nog tegen te vallen, zie o.a. deze thread: http://forum.java.sun.com/thread.jspa?threadID=497595. :)

Maar, de suggestie die hier geopperd wordt is om revalidate() aan te roepen (zie replies 16 en 17 op de 2e pagina).

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Probeer eens de methode revalidate() van een JPanel.. Als je componenten toevoegt wil het wel eens helpen om te revalidaten..

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
en dat werkt perfect!

Ook te simpel eigenlijk, dat ik er zelf niet opkwam |:( |:(

Bedankt in ieder geval!

[ Voor 13% gewijzigd door pderaaij op 20-10-2007 14:48 ]


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
En even voor de duidelijkheid:
void revalidate() Request that the component and its affected containers be laid out again. You should not generally need to invoke this method unless you explicitly change a component's size/alignment hints after it's visible or change a containment hierarchy after it is visible. Always invoke repaint after revalidate.