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.
Standaard krijgt men bij opening dit scherm te zien:

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

Als ik iets aan de grootte verander krijg ik wel een volledige repaint en krijg je wat ik direct wil:

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??
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:

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

Als ik iets aan de grootte verander krijg ik wel een volledige repaint en krijg je wat ik direct wil:

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??