Toon posts:

[Java] JPanel refreshen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Om een Java-applicatie te maken (te vergelijken met een simpele tekstverwerker) gebruik ik de volgende klasse:

Java:
1
2
3
4
5
6
7
8
9
10
// BorderLayout
class BorderLayoutPanel extends JPanel {
    public BorderLayoutPanel(){
        setLayout(new BorderLayout());

        add(new TekstVak(), BorderLayout.CENTER);
        add(new FileHandler(), BorderLayout.WEST);
        add(new Bediening(), BorderLayout.SOUTH);
    }
}


Nu zorgt de "FileHandler()" instantie ervoor dat er een lijst met JButtons tevoorschijn komt waarbij elke button een bestand uit de uitgelezen directory voorstelt. Deze code ziet er als volgt uit:

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
public class FileHandler extends JPanel {
    public static List<JButton> files;
    public ReadFile openbestand;
    public JButton refresh;
    
    File folder = new File("/Users/user/Documents/workspace/textedit");
    File[] listOfFiles = folder.listFiles();
    
    public FileHandler(){
        refresh = new JButton("refresh");
        add(refresh);
        files = new ArrayList<JButton>(); 
        setLayout(new GridLayout(10,10));
        
        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                JButton button = new JButton(listOfFiles[i].getName());  
                files.add(button);
                button.addActionListener(new KnopHandler());
                add(button);
            } 
        }
    }
    
    class KnopHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            String bestand = ((AbstractButton) e.getSource()).getText();
            if (bestand == "refresh"){
                revalidate();
            } else {
                openbestand = new ReadFile(bestand);
                TekstVak.setBox(bestand, ReadFile.getInhoud());
                Bediening.naam.setText(bestand);
            }
        }
    }
}


Wanneer er nu een bestand bijkomt of weggaat uit de uitgelezen directory, wil ik graag dat deze instantie opnieuw wordt aangeroepen, of dus eigenlijk wordt herladen.

Nu heb ik geprobeerd een 'refresh'-button te maken (niet de mooiste oplossing) waarmee ik 'revalidate()' aanroep in mijn FileHandler(). Helaas levert dit geen resultaat.

Kan iemand mij vertellen in welke richting ik moet denken om dit werkend te krijgen?

Acties:
  • 0 Henk 'm!

Verwijderd

revalidate() doet niet wat jij verwacht dat het doet.

Je kan beter repaint() gebruiken.
revalidate() markeert dat de children van dit panel opnieuw getekend worden.
repaint() markeert dat dit panel zelf opnieuw getekend moet worden.

Echter dit gaat je probleem niet oplossen, De JButtons worden in de constructor toegevoegd van je JPanel. Dit gebeurd 1 keer, bij initiatie.

Zodra op refresh wordt gedrukt zul je dus eerst zelf de lijst moeten doorlopen en extra JButtons toevoegen of reeds bestaand verwijderen op basis van de lijst in het filesysteem.

Wil je geen refresh knop gebruiken kan je dit nog even bekijken: Watching a Directory for Changes