avevi proprio ragione non avevo instanziato l'oggetto chooser ma ora è nato un altro problema ovvero, come hai visto per ottenere una finestra di dialogo la quale mi permetta di aprire un file ho usato il metodo showOpenDialog, ovviamente ho cercato anche di realizzare la finestra dii dialogo la quale mi permetta di salvare un file usando il metofo showSaveDialog ma mi compare il solo null pointer con il seguente messaggio della finestra di DOS:
codice:
C:\j2sdk1.4.1_01\bin>java TextEditTest
java.lang.NullPointerException
at TextEditFrame$FileMenuListener.menuSelected(TextEditFrame.java:356)
at javax.swing.JMenu.fireMenuSelected(JMenu.java:1106)
at javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1199)
at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.ja
va:361)
at javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:22
7)
at javax.swing.JMenu.setSelected(JMenu.java:286)
at javax.swing.JMenu.menuSelectionChanged(JMenu.java:1266)
at javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager
.java:81)
at javax.swing.plaf.basic.BasicMenuUI$MouseInputHandler.mousePressed(Bas
icMenuUI.java:314)
at java.awt.Component.processMouseEvent(Component.java:5090)
at java.awt.Component.processEvent(Component.java:4890)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3162)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1585)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
sotto ti riporto le modifiche fatte con la nuova routine la quale "dovrebbe" gestire l'evento per l'apertura di un file:
codice:
public class TextEditFrame extends JFrame{
.......
.......
private JFileChooser chooser = new JFileChooser();
.......
.......
//BARRA DEI MENU
//menu di massimo livello FILE
JMenu fileMenu = new JMenu("File");
//mostra il tasto mnemonico
fileMenu.setMnemonic('F');
//agginge le voci del menu File
JMenuItem newItem = fileMenu.add(new TestAction("New"));
//agginge le voci del menu File con i tasti di scelta rapida
JMenuItem openItem = new JMenuItem("Open");
openItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_O, InputEvent.CTRL_MASK));
fileMenu.add(openItem);
openItem.addActionListener(new FileOpenListener());
//inserisce una linea separatrice fra le voci del menu File
fileMenu.addSeparator();
saveItem = new JMenuItem("Save");
saveItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S, InputEvent.CTRL_MASK));
fileMenu.add(saveItem);
openItem.addActionListener(new FileSaveListener());
.....
.....
//BARRA DEGLI STRUMENTI
//imposta le azioni dei pulsanti
Action newAction = new TestAction("New", new ImageIcon("new.gif"));
JButton openButton = new JButton(new ImageIcon("open.gif"));
openButton.addActionListener(new FileOpenListener());
JButton saveButton = new JButton(new ImageIcon("save.gif"));
saveButton.addActionListener(new FileSaveListener());
......
......
/*
@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
/*
@effects apre una finestra di dialogo di scelta dei file
**/
private class FileSaveListener 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.showSaveDialog(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
}//FileSaveListener