package javacodebook.gui.showfile; import java.awt.*; import java.awt.event.*; import java.io.*; /** * ShowFileFrame bietet die Möglichkeit eine Datei vom Dateisystem * auszuwählen, und im Frame anzuzeigen. */ public class ShowFileFrame extends Frame { private MenuBar mb = new MenuBar(); private Menu file = new Menu("Datei"); private MenuItem newFile = new MenuItem("Datei auswählen"); private TextArea fileViewer=new TextArea(); /** * Konstruktor von ShowFileFrame */ public ShowFileFrame() { super("Datei:"); // Gui wird gebaut this.setMenuBar(mb); mb.add(file); file.add(newFile); add(fileViewer); // An das MenuItem newFile wird ein Listener angemeldet, der // bei Auswahl den FileDialog öffnet. newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae){ // Der FileDialog wird mit Titel und einem Button zum öffnen // von Dateien erstellt. FileDialog fd = new FileDialog(ShowFileFrame.this, "Öffnen Dialog",FileDialog.LOAD); // Das Verzeichnis, welches in dem Dialog zu Begin ausgewählt // sein wird, kann wie folgt gesetzt werden: fd.setDirectory("c:\\tmp"); // wie bei jedem TopLevel-Container muss auch dieser Dialog sichtbar // gemacht werden fd.setVisible(true); // Wird der modale FileDialog beendet springt das Programm // wieder hierher. Falls der Öffnen-Button betätigt wurde, // liefert fd.getFile() den Filenamen zurück und auf Basis // dieser Information kann die TextArea gefüllt werden. // Falls der Abbrechen-Button betätigt wurde, liefert // fd.getFile() null zurück, und die actionPerformed Methode // wird verlassen. if (fd.getFile()!=null) { File selectedFile = new File(fd.getDirectory(),fd.getFile()); setFile(selectedFile); } } }); } /** * 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) {} } } }