ik zit met het volgende probleem. Het is volgens mij vrij basic maar ik kom er niet meer uit.
Ik heb een dialog met twee panels. Links een panel met zeg maar een lijstje met de naam van de hoofd eigenschap (buttons). Je klikt er op en in het rechter panel komen de detail eigenschappen die je vervolgens kunt aanpassen en saven. Het zelfde idee als bijvoorbeeld FlasFXP sitemanager.
Het scherm opbouwen is geen probleem. Het probleem is dat ik vanuit het linkerpanel het rechterpanel wel kan bereiken maar de repaint werkt niet. Het panel wordt dus niet gerefreshed.
het dialog waarin de panels zitten:
panel right:
panel left:
Via methode 1 lijkt mij de correcte methode, de Server server wordt in het rechterpanel veranderd (dit gebeurt ook echt) en daarna het panel opnieuw opbouwen. Alleen dat gebeurt niet, als ik bijvoorbeeld right.hide() doe werkt dat echter wel weer.
Via methode 2 werkt het wel maar dit is volgens mij niet de correcte manier. En bij pack() kijkt hij dus niet meer naar de size je hebt opgegeven.
Dus de vraag, is methode2 normaal of een huge fix. En wat doe ik fout?
PS Cst_v01 is de naam van de app.
Ik heb een dialog met twee panels. Links een panel met zeg maar een lijstje met de naam van de hoofd eigenschap (buttons). Je klikt er op en in het rechter panel komen de detail eigenschappen die je vervolgens kunt aanpassen en saven. Het zelfde idee als bijvoorbeeld FlasFXP sitemanager.
Het scherm opbouwen is geen probleem. Het probleem is dat ik vanuit het linkerpanel het rechterpanel wel kan bereiken maar de repaint werkt niet. Het panel wordt dus niet gerefreshed.
het dialog waarin de panels zitten:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public class FrameSitemanager extends Dialog { PanelServerProperties right; public FrameSitemanager( Frame parent, String title, Server server ){ super( parent, title, false ); setSize(600,450); setLocation(200, 200); server = new Server( "", "", 21 ); right = new PanelServerProperties( server ); PanelSiteList left = new PanelSiteList( right ); setLayout( new GridLayout(1,2) ); add( left ); add( right ); } } |
panel right:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class PanelServerProperties extends Panel { public PanelServerProperties( Server server ){ this.server = server; // aantal velden worden getoond met gegevens van Server server } public void setServer( Server server ){ this.server = server; System.out.println("refresh - "+server.getName() ); this.doLayout(); this.repaint(); this.validate(); validate(); doLayout(); } } |
panel left:
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
| public class PanelSiteList extends Panel { int count = 0; Server[] serverList; Button[] buttons; PanelServerProperties right; public PanelSiteList( PanelServerProperties right ){ this.right = right; count = Servers.getCount(); serverList = Servers.getServers(); buttons = new Button[count+1]; System.out.println( "count = "+count ); for( int t = 1; t <= count; t++ ){ System.out.println("Button"+t); buttons[t] = new Button( ""+serverList[t].getName() ); buttons[t].addActionListener( new ButtonHandler(t) ); add( buttons[t] ); } } class ButtonHandler implements ActionListener { private int nr; public ButtonHandler( int nr ){ this.nr = nr; } public void actionPerformed( ActionEvent e ){ /* METHODE 1 right.setServer( serverList[nr] ); right.doLayout(); right.repaint(); right.validate(); right.hide(); */ // METHODE 2 Cst_v01.siteManager.remove( right ); Server server = serverList[nr]; PanelServerProperties right = new PanelServerProperties( server ); Cst_v01.siteManager.add( right ); Cst_v01.siteManager.pack(); } } } |
Via methode 1 lijkt mij de correcte methode, de Server server wordt in het rechterpanel veranderd (dit gebeurt ook echt) en daarna het panel opnieuw opbouwen. Alleen dat gebeurt niet, als ik bijvoorbeeld right.hide() doe werkt dat echter wel weer.
Via methode 2 werkt het wel maar dit is volgens mij niet de correcte manier. En bij pack() kijkt hij dus niet meer naar de size je hebt opgegeven.
Dus de vraag, is methode2 normaal of een huge fix. En wat doe ik fout?
PS Cst_v01 is de naam van de app.
VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!