Toon posts:

[Java] JFileChooser en event handling

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik maak gebruik van een JFileChooser met twee zelfgemaakte choosable filefilters. Als ik van file filter verander wil ik ook daadwerkelijk het nieuwe filter gebruiken en ik wil nog wat checks uitvoeren als er op de open knop wordt gedrukt. Ik heb een tijd gezocht naar de juiste event handlers die ik daarvoor kan gebruiken en deze howto doorgelezen:

http://java.sun.com/docs/...swing/overview/event.html

en de howto over het gebruik van de JFileChooser

maar ik ben er nog niet echt uitgekomen. Ik heb geprobeerd mijn klasse actionlistener te laten implementeren en heb een actionevent method geschreven, maar deze werd pas getriggerd na het afsluiten van de dialog.

Ik ben vrij onbekend met de grafische kant van java en de bijbehorende event handling en mijn vragen zijn daarom:

Hoe kan ik het beste uitzoeken welke listeners/event handlers ik moet gebruiken ?en hoe pas ik die toe op de individuele componenten van de JFileChooser?

  • bigben04
  • Registratie: December 2001
  • Laatst online: 05-08 22:33
Verwijderd schreef op 24 november 2003 @ 15:38:
Als ik van file filter verander wil ik ook daadwerkelijk het nieuwe filter gebruiken
Bedoel je wanneer je onder de balk voor de bestandsnaam een ander filter kiest? Dan wordt het dialoogvenster volgens mij toch echt automatisch aangepast hoor.

Verwijderd

Topicstarter
Ja, maar ik maak gebruik van twee filters. Een filter die alleen JAR files weergeeft en 1 die alleen directories weergeeft. Afhankelijk van het filter moet ik de setFileSelectionMode instellen op Directories only of FIles only.

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 11-06 11:16
Kun je niet een eigen klasse maken die van JFileChooser erft? Op die manier kun je dan je eigen functionaliteit invoegen volgens mij. (door bepaalde methoden te overriden, kun je dan bijv checks invoegen)

Pwnd


Verwijderd

Verwijderd schreef op 24 november 2003 @ 16:34:
Ja, maar ik maak gebruik van twee filters. Een filter die alleen JAR files weergeeft en 1 die alleen directories weergeeft. Afhankelijk van het filter moet ik de setFileSelectionMode instellen op Directories only of FIles only.
Hmm, ik heb het als volgt gedaan. Als je alleen files of dirs wil weergeven, maak je deze filters:

Java:
1
2
3
4
5
6
7
8
9
10
11
import java.io.*;
import javax.swing.filechooser.FileFilter;
public class AlleenDir extends FileFilter{
    public boolean accept(File f){
        return f.isDirectory();
    }
    
    public String getDescription(){
        return "Alleen dirs";
    }
}


Java:
1
2
3
4
5
6
7
8
9
10
import java.io.*;
import javax.swing.filechooser.FileFilter;
public class AlleenFile extends FileFilter{
    public boolean accept(File f){
        return !(f.isDirectory());
    }
    public String getDescription(){
        return "Alleen files";
    }
}


En deze heb ik als volgt getest.

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
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

public class Test{
    public Test(){
        JFileChooser chooser = new JFileChooser();
    
        AlleenDir filter = new AlleenDir();
        AlleenFile filter2 = new AlleenFile();
        
        chooser.addChoosableFileFilter(filter);
        chooser.addChoosableFileFilter(filter2);
        int returnVal = chooser.showOpenDialog(null);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
           System.out.println("You chose to open this file: " +
                chooser.getSelectedFile().getName());
        }
        System.exit(0);
    }
    
    public static void main(String[] a){
        new Test();
    }
}


Volgens mij heb ik nu beschreven wat je wilde, of was dit niet de bedoeling? Dit is imo wel makkelijker als het setFileMode gedoe imo.

/edit

Deze code zou moeten compilen, en je ziet 3 filters tot je beschikking, waarvan de bovenste eigenlijk weg moet, maar ik kan niet zo 1-2-3 kan vinden hoe die weg te halen zijn.

Ik krijg nu per filter keurig de dirs of files die ik nodig heb (moet evt accept(File f)) aangepast worden.

Ik weet niet of dit de bedoeling was, maar dat "geklungel" met setFileMode is niet nodig iig (voor filters).

[ Voor 11% gewijzigd door Verwijderd op 24-11-2003 22:37 ]


Verwijderd

Topicstarter
Bedankt voor je reactie.

Dit was deels wat ik bedoelde. Ik heb zelf ook al dmv addchoosablefilefilter filters toegevoegd, het probleem is echter, dat deze filters bepalen wat de gebruiker te zien krijgt en niet wat de gebruiker uiteindelijk kan selecteren dmv open.

Wat ik eigenlijk wil is 1 filter die alleen jar files en directories weergeeft en waar je alleen een jar file kunt openen (dus geen dirs) en 1 filter die alleen dirs weergeeft en waar je alleen dirs kunt openen

Mocht je het overigens willen weten, het accept all filter verwijder je door:

filechooser.setAcceptAllFileFilterUsed(false);

Edit:

Had jou reactie nog niet gelezen donderwolk, zal er eens naar kijken, bedankt

[ Voor 19% gewijzigd door Verwijderd op 25-11-2003 08:53 ]


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
* SWfreak is maar eens de source van de JFileChooser ingedoken.
Volgens mij kun je dmv addPropertyChangeListener het 'event' dat de filter veranderd wel kunnen opvangen. Je moet dan zoiets doen (mijn Java is een beetje roestig, maar het idee is waarschijnlijk wel duidelijk):
Java:
1
2
3
4
5
6
PropertyChangeListener ln = new PropertyChangeListener() {
  void propertyChange( PropertyChangeEvent e ) {
      //doe wat je wilt afhankelijk van de huidige file filter
   }
};
filechooser.addPropertyChangeListener( JFileChooser.FILE_FILTER_CHANGED_PROPERTY, listener);

Je kunt in de listener opvragen wat de nieuwe filter is door naar het event te kijken, maar je kunt ook gewoon naar de filechooser kijken.
Ik hoop dat het werkt...
Pagina: 1