Spulciando dai libri di java ho trovato una routine la quale mi permette di aprire una finestra di dialogo la quale mi dovrebbe far aprire un file. Uso il condizionale inquanto vi sono degli errori; per essere più preciso riporto i frammenti del codice interessati con i relativi messaggi di errore:
Packeg usati:
codice:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.beans.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import java.swing.filechooser.FileFilter;
import java.swing.filechooser.FileView;
...
ExtensionFileFilter.java classe che gestisce il filtro di selezione del file da aprire:
codice:
/**
@effects rappresenta un filtro di file corrispondente a tutti i file con un dato set di estensioni
*/
class ExtensionFileFilter extends FileFilter{
private String description = "";
private ArrayList extensions = new ArrayList();
/**
@effects Aggiunge un'estensione riconosciuta da questo diltro di file.
@param extension rappresenta un'estensione di file (come ".txt" o "txt"
*/
public void addExtension(String extension){
if(!extension.startsWith("."))
extension = "." + extension;
extensions.add(extension.toLowerCase());
}//addExtension
/**
@effects Imposta una Descrizione per il set di file riconosciuti da questo filtro di file.
@param aDescription rappresenta una descrizione del set di file
*/
public void setDescription(String aDescription){
description = aDescription;
}//setDescription
/**
@effects restituisce una descrizione per il set di file riconosciuti da questo filtro di file.
@return una descrizione del set di file.
*/
public String getDescription(){
return description;
}//getDescription
public boolean accept(File f){
if(f.isDirectory())
return true;
String name = f.getName().toLowerCase();
//controlla se il nome di file termina con una delle estensioni
for(int i = 0; i < extensions.size(); i++)
if(name.endsWith((String)extensions.get(i)))
return true;
return false;
}//accept
}
TextEditFrame.java è la classe che implementa l'editor di testo.
Si tenga presente che il comando Open viene implementato sia da voce di menu File:
codice:
//BARRA DEI MENU
...
JMenuItem openItem = new JMenuItem("Open");
openItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_O, InputEvent.CTRL_MASK));
fileMenu.add(openItem);
openItem.addActionListener(new FileOpenListener());
...
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(fileMenu);
...
che da barra degli strumenti
//BARA DEGLI STRUMENTI
...
JButton openButton = new JButton(new ImageIcon("open.gif"));
openButton.addActionListener(new FileOpenListener());
...
//popola la barra degli strumenti
JToolBar bar = new JToolBar("Standard bar");
...
bar.add(openButton);
...
mentre di seguito è riportata l'azione associata ai due eventi:
/*
@effects apre una finestra di dialogo di scelta dei file
**/
private class FileOpenListener implements ActionListener{
public void actionPerformed(ActionEvent evt){
//imposta la finestra di scelta dei file
chooser.setCurrentDirectory(new File("."));
//accetta tutti i file di testo con estenzione .txt .java .c .cpp
final ExtensionFileFilter filter
= new ExtensionFileFilter();
filter.addExtension("txt");
filter.addExtension("java");
filter.addExtension("c");
filter.addExtension("cpp");
filter.setDescription("Text files");
chooser.setFileFilter(filter);
//mostra una finestra di dialogo di scelta del file
int result
= chooser.showOpenDialog(TextEditFrame.this);
//per salvare usare showSaveDialog
//se il file di testo selezionato è accettato, lo visualizza nella casella di testo
if(result == JFileChooser.APPROVE_OPTION)
textArea.setText(chooser.getSelectedFile().getPath());
}//actionPerformed
}//FileOpenListener
Messaggi di errore: al momento della compilazione della classe di filtro per il file selezionato, ovvero il file ExtensionFileFilter.java ricevo il seguente messaggio di errore:
codice:
C:\j2sdk1.4.1_01\bin>javac ExtensionFileFilter.java
ExtensionFileFilter.java:9: package java.swing.filechooser does not exist
import java.swing.filechooser.FileFilter;
^
ExtensionFileFilter.java:10: package java.swing.filechooser does not exist
import java.swing.filechooser.FileView;
^
ExtensionFileFilter.java:16: no interface expected here
class ExtensionFileFilter extends FileFilter{
^
3 errors
Da come si evince dal messaggio il JDK mi dice che i package FileFilter e FileView non esistono !! Come posso risolvere tale problema?