[JAVA] Update JPanel

Pagina: 1
Acties:

  • RickyHeijnen
  • Registratie: Maart 2005
  • Laatst online: 30-04-2025
Ik heb een JFrame met daarin links een JScrollPane en rechts 3 JPanel's onder elkaar. Nu is het zo dat als ik een item uit het ScollPane kies, dat hij één JPanel moet updaten met nieuwe gegevens.
Dat doet hij ook, althans... de goede methodes voert hij uit. Echter laat hij niet de nieuwe informatie zien. Nu weet ik dat je het jpanel moet updaten, maar zowel met updateUI() en repaint() blijft hij de oude informatie tonen.

Dit is de huidige code: (jaja, ik weet dat de naamgeving bagger is, maar at los ik later nog even op.)
code:
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
public class PanelList extends JPanel implements ListSelectionListener {
    
    private DefaultListModel model;
    private JPanel overzicht;
    private BorderLayout layout;
    private JScrollPane scrollPane;
    private JList listbox;
    
    private JPanel answerPane, viewDocent, viewStudent, viewScore;
    
    private Toets toets;

    
    /** Creates a new instance of PanelList */
    public PanelList() {
    this.setLayout( new BorderLayout() );
        this.buildList();
        this.buildOverview();
        this.setVisible(false);
        this.setSize(new Dimension(800, 600));
    }  
    
    public void showToets(Toets toets){
        this.toets = toets;
        
        viewDocent = new JPanel();
        answerPane.add(viewDocent());
        viewStudent = new JPanel();
        answerPane.add(viewStudent(0));
        viewScore = new JPanel();
        answerPane.add(viewScore(0));        
    }
        

    
    public JPanel viewStudent(int student){
                
        viewStudent.setSize(700, 150);
        TitledBorder border = BorderFactory.createTitledBorder("Student Antwoorden"); 
        border.setTitlePosition(TitledBorder.TOP);
        viewStudent.setBorder(border);
                    
        return viewStudent;
    }
    

    
    // Handler for list selection changes
    public void valueChanged( ListSelectionEvent event )
    {
        System.out.println(listbox.getSelectedIndex());
        viewStudent(listbox.getSelectedIndex());      
        viewStudent.updateUI();
    }
}


Hij voert dus de de constructor uit en meteen (van de parent-klasse) ook showToets() waarmee de gegevens voor het scollpane worden ingeladen. Op het moment dat er een waarde geselecteerd wordt, moet hij valeChanged uitvoeren, ook dat gebeurt en vervolgens dus dat paneltje refreshen.


hiëarchie van JPanels:
code:
1
2
3
4
5
6
7
8
9
10
11
PanelList
  |
   -- JScrollPane
  |
   -- answerPane
       |
        -- viewDocent
       |
        -- viewStudent
       |
        -- viewScore

[ Voor 31% gewijzigd door RickyHeijnen op 21-08-2006 17:31 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kun je, ipv 109 regels code, even alleen de relevante code posten? En heb je al gedebugged met wat breakpointjes enzo?
Een diagrammetje ofzo van je panels zou het ook stukken makkelijker maken voor ons om inzicht te krijgen van je layout/hiëarchie.

[ Voor 63% gewijzigd door RobIII op 21-08-2006 17:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • RickyHeijnen
  • Registratie: Maart 2005
  • Laatst online: 30-04-2025
ik heb al wat weggelaten, ik zal kijken wat nog meer irrelevant is...

Ja ik heb alle getest, ALLE regels die hij moet uitvoeren worden ook uitgevoerd, het gaat puur om het updaten

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
In je constructor zie ik this.setVisible(false);.
Als al die andere panels op PanelList zitten is het toch logisch dat je niets ziet?

En als je het toch al ergens weer visible zet:

Je hebt een methode viewStudent (dezelfde naam als de variabele JPanel viewStudent, zou ik veranderen). Daarin geef je een int mee. Maar met die waarde doe je niets! Dus al zou je 100 keer die methode aanroepen in je valueChanged methode met verschillende waardes, er veranderd helemaal niets. Dus zal je tussen de updates ook geen verschillen zien. Als je regel 39 nou eens veranderd in:
TitledBorder border = BorderFactory.createTitledBorder("Student Antwoorden: " + student);
Zie je dan wel veranderingen als je een andere waarde in je listbox selecteert?

[ Voor 69% gewijzigd door The Fox NL op 22-08-2006 13:51 ]