6.2.- JFileChooser
El component JFileChooser és capaç d'obrir un diàleg per a poder seleccionar un fitxer permetent navegar pel sistema de fitxers. Té dues variants: showOpenDialog i showSaveDialog, amb alguna diferència que ara comentarem.
showOpenDialog()
És un mètode de JFileChooser que obre un diàleg per a seleccionar un fitxer. Posteriorment:
- El fitxer seleccionat l'obtindrem amb getSelectedFile(), que torna directament el file.
- El mètode retorna un valor dient si s'ha seleccionat o no un fitxer (podria haver-se cancel·lat o tancat el diàleg). Aquest valor el podem comparar amb la constant JFileChooser.APPROVE_OPTION
El següent codi tan senzill ens permet seleccionar un fitxer, i traure el seu nom. Com veieu es fa l'acció quan s'apreta el botó utilitzat en exemples anteriors:
boto1.addActionListener {
val fc = JFileChooser()
val r = fc.showOpenDialog(this)
if (r == JFileChooser.APPROVE_OPTION) {
println("Fitxer seleccionat: " + fc.getSelectedFile().getName());
} else
println("No s'ha seleccionat res");
}

Comodíssim, però encara el podem fer més còmode. Si observeu, quan apreteu el botó, se situa en el directori principal de l'usuari. Podem navegar pel sistema de fitxers i seleccionar un determinat fitxer. Però si tornem a apretar el botó, torna a situar-se al directori principal de l'usuari. Això és perquè si no ho especifiquem, se situa en aquest directori cada vegada que es cree un objecte de la classe JFileChooser. I ara estem creant un nou objectecada vegada que apretem.
Anem a evitar crear un objecte cada vegada. Si ens definim l'objecte JFileChooser com una variable que es puga accedir tota l'estona, d'una vegada a l'altra podrem mantenir el fitxer seleccionat. Així doncs, en el següent exemple, si anem navegant per a seleccionar un determinat fitxer, i si apretem el botó una altra vegada per a navegar, mantindrà el subdirectori seleccionat la primera vegada, ja que el JFileChooser és el mateix i no s'ha definit una altra vegada. Fins i tot mantindrà el fitxer seleccionat la primera vegada, cosa que és molt útil en moltes ocasions.
class Finestra : JFrame() {
val boto1 = JButton("Botó 1")
val fc = JFileChooser()
init {
defaultCloseOperation = JFrame.EXIT_ON_CLOSE
setTitle("Exemple de JDialog")
setSize(400, 300)
setLocationRelativeTo(null)
setLayout(GridLayout(2, 1))
val panell1 = JPanel(FlowLayout())
val panell2 = JPanel(FlowLayout())
add(panell1)
add(panell2)
panell1.add(JLabel("Programa principal. Per anar al diàleg apreta el botó"))
panell2.add(boto1)
boto1.addActionListener {
val r = fc.showOpenDialog(this)
if (r == JFileChooser.APPROVE_OPTION) {
println("Fitxer seleccionat: " + fc.getSelectedFile().getName());
} else
println("No s'ha seleccionat res");
}
}
}
showSaveDialog()
És un diàleg idèntic a l'anterior, excepte que el títol de la finestra de diàleg i el botó principal diran Guardar en compte d'Obrir.

Recordeu que aquestos dos procediments no obren ni guarden el fitxer, únicament el seleccionen.
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial SenseObraDerivada 2.5