dh-Materialien
Java Projekte
// JavaProject SimpleEditor

// SimpleEditor.java

import java.awt.*;
import java.io.*;
import java.nio.file.*;
import java.awt.event.*;
import java.awt.print.*;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;


class Frame extends JFrame implements WindowListener, DocumentListener {
    private static final long serialVersionUID = 0L;

    Image icon;
    MenuBar menubar;
    JScrollPane scrollpane;
    JTextArea textarea;

    String font_name;
    int font_style;
    int font_size;

    JFileChooser filechooser;
    Path path;
    int APPROVED = JFileChooser.APPROVE_OPTION;

    Frame() {
        setTitle("Unbenannt - SimpleEditor");
        icon = Toolkit.getDefaultToolkit().getImage("dh.png");
        setIconImage(icon);
        setSize(349, 301);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setLocationRelativeTo(null);
        addWindowListener(this);

        menubar = new MenuBar(this);
        setJMenuBar(menubar);

        textarea = new JTextArea();
        textarea.setEditable(true);

        font_name = "Verdana";
        font_style = 0; // PLAIN
        font_size = 12;
        textarea.setFont(new Font(font_name, font_style, font_size));
        textarea.setMargin(new Insets(5, 5, 5, 5));
        textarea.setLineWrap(true);
        textarea.getDocument().addDocumentListener(this);
        scrollpane = new JScrollPane(textarea);
        scrollpane.setBorder(BorderFactory.createEmptyBorder());
        add(scrollpane);

        setWindowsLookAndFeel();
        setGermanLabels();
        filechooser = new JFileChooser();
        filechooser.setFileFilter(new FileNameExtensionFilter("Textdateien", "TXT"));

        setVisible(true);
    }

    void setWindowsLookAndFeel() {
        String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
        try {
            UIManager.setLookAndFeel(plaf);
        }
        catch (Exception e) {
            showErrorDialog("WindowsLookAndFeel ist nicht möglich.");
        }
    }

    void setGermanLabels() {
        UIManager.put("FileChooser.acceptAllFileFilterText", "Alle Dateien");
        UIManager.put("FileChooser.lookInLabelText", "Suchen in:");
        UIManager.put("FileChooser.newFolderToolTipText", "Neuen Ordner anlegen");
        UIManager.put("FileChooser.listViewButtonToolTipText", "Liste");
        UIManager.put("FileChooser.upFolderToolTipText", "Eine Ebene höher");
        UIManager.put("FileChooser.fileNameLabelText", "Dateiname:");
        UIManager.put("FileChooser.filesOfTypeLabelText", "Dateityp:");
        UIManager.put("FileChooser.cancelButtonText", "Abbrechen");
        UIManager.put("FileChooser.cancelButtonToolTipText", "Dialog abbrechen");

        UIManager.put("OptionPane.yesButtonText", "Ja");
        UIManager.put("OptionPane.noButtonText", "Nein");
        UIManager.put("OptionPane.cancelButtonText", "Abbrechen");
    }

    void showErrorDialog(String message) {
        JOptionPane.showMessageDialog (
            this,
            message,
            "Ein Fehler ist aufgetreten.",
            JOptionPane.ERROR_MESSAGE
        );
    }

    int showQuestionDialog() {
        int answer = JOptionPane.showConfirmDialog (
            this,
            "Soll der aktuelle Text gespeichert werden?",
            "SimpleEditor",
            JOptionPane.YES_NO_CANCEL_OPTION
        );
        return answer;
    }

    void setNewFile() {
        textarea.setText("");
        setTitle("Unbenannt - SimpleEditor");
    }

    void newFile() {
        if (getTitle().startsWith("*")) {
            switch (showQuestionDialog()) {
                case JOptionPane.YES_OPTION:
                    if (saveasFile() == APPROVED) setNewFile();
                    break;
                case JOptionPane.NO_OPTION:
                    setNewFile();
                    break;
                case JOptionPane.CANCEL_OPTION:
            }
        }
        else setNewFile();
    }

    void readFile(Path path) {
        try {
            textarea.setText(Files.readString(path));
            setTitle(path.getFileName().toString()+" - SimpleEditor");
        }
        catch (IOException e) {
            showErrorDialog("Die Datei konnte nicht geöffnet werden.");
        }
    }

    void openSelectedFile() {
        filechooser.setDialogTitle("Öffnen");
        filechooser.setApproveButtonText("Öffnen");
        filechooser.setApproveButtonToolTipText("Datei öffnen");

        if (filechooser.showOpenDialog(this) == APPROVED) {
            File file = filechooser.getSelectedFile();
            path = Paths.get(file.toString());
            readFile(path);
        }
    }

    void openFile() {
        if (getTitle().startsWith("*")) {
            switch (showQuestionDialog()) {
                case JOptionPane.YES_OPTION:
                    saveFile();
                    openSelectedFile();
                    break;
                case JOptionPane.NO_OPTION:
                    openSelectedFile();
                    break;
                case JOptionPane.CANCEL_OPTION:
            }
        }
        else openSelectedFile();
    }

    void writeFile(Path path, byte[] bytes) {
            try {
                Files.write(path, bytes);
                setTitle(path.getFileName().toString()+" - SimpleEditor");
            }
            catch (IOException e) {
                showErrorDialog("Die Datei konnte nicht gespeichert werden.");
        }
    }

    int saveasFile() {
        filechooser.setDialogTitle("Speichern als ...");
        filechooser.setApproveButtonToolTipText("Text speichern");
        int answer = filechooser.showDialog(this, "Speichern");

        if (answer == APPROVED) {
            String filestring = filechooser.getSelectedFile().toString();

            if (filechooser.getFileFilter().getDescription() == "Textdateien") {
                boolean txt = filestring.endsWith(".txt");
                boolean TXT = filestring.endsWith(".TXT");
                if ((!txt)&&(!TXT)) filestring = filestring.concat(".txt");
            }
            path = Paths.get(filestring);
            writeFile(path, textarea.getText().getBytes());
        }
        return answer;
    }

    void saveFile() {
        if (!getTitle().startsWith("Unbenannt")) {
            if (getTitle().startsWith("*Unbenannt")) saveasFile();
            else writeFile(path, textarea.getText().getBytes());
        }
    }

    void printFile() {
        Printable printable = textarea.getPrintable(null, null);
        PrinterJob prtjob = PrinterJob.getPrinterJob();
        if (prtjob.printDialog()) {
            try {
                prtjob.setPrintable(printable, prtjob.defaultPage());
                prtjob.print();
            }
            catch (PrinterException e) {
                showErrorDialog("Das Dokument konnte nicht gedruckt werden.");
            }
        }
    }

    void closeFile() {
        if ((!textarea.getText().isEmpty())&&(getTitle().startsWith("*"))) {
            switch (showQuestionDialog()) {
                case JOptionPane.YES_OPTION:
                    if (saveasFile() == APPROVED) System.exit(0);
                    break;
                case JOptionPane.NO_OPTION:
                    System.exit(0);
                    break;
                case JOptionPane.CANCEL_OPTION:
            }
        }
        else System.exit(0);
    }

    void changeTitle() {
        if (!getTitle().startsWith("*")) setTitle("*"+getTitle());
        boolean isEmpty = (textarea.getText().isEmpty()) ? true : false;
        boolean isNew = (getTitle().startsWith("*Unbenannt -")) ? true : false;
        if (isEmpty && isNew) setTitle("Unbenannt - SimpleEditor");
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
            changeTitle();
    }
    @Override
    public void insertUpdate(DocumentEvent e) {
        changeTitle();
    }
    @Override
    public void removeUpdate(DocumentEvent e) {
        changeTitle();
    }

    @Override
    public void windowClosing(WindowEvent e) {
        closeFile();
    }

    @Override
    public void windowOpened(WindowEvent e) { }
    @Override
    public void windowClosed(WindowEvent e) { }
    @Override
    public void windowIconified(WindowEvent e) { }
    @Override
    public void windowDeiconified(WindowEvent e) { }
    @Override
    public void windowActivated(WindowEvent e) { }
    @Override
    public void windowDeactivated(WindowEvent e) { }
}


public class SimpleEditor {

    public static void main(String[] args) {
        new Frame();
    }
}



// MenuBar.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


class MenuBar extends JMenuBar implements ActionListener {
    private static final long serialVersionUID = 0L;

    Frame frame;

    JMenu file;
    JMenuItem file_new;
    JMenuItem file_open;
    JMenuItem file_save;
    JMenuItem file_saveas;
    JMenuItem file_print;
    JMenuItem file_close;

    public MenuBar(Frame frame) {
        this.frame = frame;

        file = new JMenu("Datei");
        add(file);

        file_new = new JMenuItem("Neu");
        file_new.addActionListener(this);
        file.add(file_new);

        file_open = new JMenuItem("Öffnen...");
        file_open.addActionListener(this);
        file.add(file_open);

        file_save = new JMenuItem("Speichern");
        file_save.addActionListener(this);
        file.add(file_save);

        file_saveas = new JMenuItem("Speichern als...");
        file_saveas.addActionListener(this);
        file.add(file_saveas);

        file_print = new JMenuItem("Drucken");
        file_print.addActionListener(this);
        file.add(file_print);

        file_close = new JMenuItem("Beenden");
        file_close.addActionListener(this);
        file.add(file_close);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == file_new)    frame.newFile();
        if (e.getSource() == file_open)   frame.openFile();
        if (e.getSource() == file_save)   frame.saveFile();
        if (e.getSource() == file_saveas) frame.saveasFile();
        if (e.getSource() == file_print)  frame.printFile();
        if (e.getSource() == file_close)  frame.closeFile();
    }
}


Download SimpleEditor