package javacodebook.gui.showfile; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; /** * ShowFileJFrame bietet die Möglichkeit eine Datei vom Dateisystem * auszuwählen, und im Frame anzuzeigen. */ public class ShowFileJFrame extends JFrame { private Container content = null; private JMenuBar mb = new JMenuBar(); private JMenu file = new JMenu("Datei"); private JMenuItem newFile = new JMenuItem("Datei auswählen"); private JTextArea fileViewer =new JTextArea(); private JScrollPane scroller = new JScrollPane(); /** * Konstruktor von ShowFileJFrame. */ public ShowFileJFrame() { super("Datei:"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); content = this.getContentPane(); this.setJMenuBar(mb); mb.add(file); file.add(newFile); scroller.getViewport().add(fileViewer); content.add(scroller); // an das MenuItem newFile wird ein Listener angemeldet, der // bei Auswahl informiert wird newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae){ // Der FileDialog wird gebaut JFileChooser fd = new JFileChooser(); // Das Default Directory, welches in dem Dialog ausgewählt // sein soll, kann wie folgt gesetzt werden: fd.setCurrentDirectory(new File("c:\\tmp")); // Wie bei den anderen Swing Dialogen wird hier über // eine show-Methoden der Dialog sichtbar gemacht. // Der Rückgabewert gibt an welcher button gedrückt wurde. int pressedButton = fd.showOpenDialog(ShowFileJFrame.this); // Weiss man über den Rückgabewert "returnValue" welcher // Button gedrückt wurde, kann über das JFilChooserObjekt die // Auswahl ermittelt werden. if(pressedButton == JFileChooser.APPROVE_OPTION) { setFile(fd.getSelectedFile()); } } }); } /** * Diese Methode liest das File aus, konvertiert es in einen String, und * platziert diesen in der TextArea des Frames. */ public void setFile(File file) { FileReader reader = null; try { // Ein FileReader wird die Daten der Datei liefern reader = new FileReader(file); // Ein Char-Array speichert die Daten zwischen int size = (int) file.length(); char[] data = new char[size]; int cursor = 0; while(cursor < size) cursor += reader.read(data, cursor, size-cursor); // Der Char-Array wird in die TextArea geschrieben. fileViewer.setText(new String(data)); this.setTitle("Datei: " + file.getName()); } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) reader.close(); } catch (IOException e) {} } } }