// 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