Bei dieser Aufgabe muss man dafür sorgen, dass der Aufruf der Funktion "Info" auch noch über das Symbol "Info" aufgerufen werden kann. (nicht nur über ein Menü Hilfe) wie bereits möglich.
Wie kriege ich das hin? Ich nehme an, dass das Symbol mit dem Dialog verbunden werden muss, aber wie?
Bitte um Antworten.
Wie kriege ich das hin? Ich nehme an, dass das Symbol mit dem Dialog verbunden werden muss, aber wie?
Bitte um Antworten.
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
public class Editor extends JFrame{
private static final long serialVersionUID = 3215604333266961332L;
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("new"))
fileNew();
if (e.getActionCommand().equals("load"))
fileLoad();
if (e.getActionCommand().equals("save"))
fileSave();
if (e.getActionCommand().equals("end"))
end();
//
if (e.getActionCommand().equals("info"))
hilfeInfo();
}
}
private JTextArea inputField;
public Editor(String text) {
super(text);
setLayout(new BorderLayout());
inputField = new JTextArea();
add(new JScrollPane(inputField), BorderLayout.CENTER);
menu();
add(symbolleiste(), BorderLayout.NORTH);
setExtendedState(MAXIMIZED_BOTH);
setMinimumSize(new Dimension(600, 200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void menu() {
JMenuBar menue = new JMenuBar();
JMenu fileMenue = new JMenu("File");
//
JMenu hilfeMenue = new JMenu("Hilfe");
MeinListener listener = new MeinListener();
JMenuItem fileNew = new JMenuItem();
fileNew.setText("Neu");
fileNew.setIcon(new ImageIcon("icons/new24.gif"));
fileNew.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
fileNew.setActionCommand("neu");
fileNew.addActionListener(listener);
fileMenue.add(fileNew);
JMenuItem fileOpen = new JMenuItem();
fileOpen.setText("Open...");
fileOpen.setIcon(new ImageIcon("icons/open24.gif"));
fileOpen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK));
fileOpen.setActionCommand("load");
fileOpen.addActionListener(listener);
fileMenue.add(fileOpen);
fileMenue.addSeparator();
JMenuItem fileSave = new JMenuItem();
fileSave.setText("Save...");
fileSave.setIcon(new ImageIcon("icons/save24.gif"));
fileSave.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK));
fileSave.setActionCommand("save");
fileSave.addActionListener(listener);
fileMenue.add(fileSave);
fileMenue.addSeparator();
JMenuItem fileEnd = new JMenuItem();
fileEnd.setText("End");
fileEnd.setActionCommand("end");
fileEnd.addActionListener(listener);
fileMenue.add(fileEnd);
//
JMenuItem hilfeInfo = new JMenuItem();
hilfeInfo.setText("Info");
fileSave.setIcon(new ImageIcon("icons/information24.gif"));
fileSave.setAccelerator(KeyStroke.getKeyStroke('I', InputEvent.CTRL_DOWN_MASK));
hilfeInfo.setActionCommand("info");
hilfeInfo.addActionListener(listener);
hilfeMenue.add(hilfeInfo);
menue.add(fileMenue);
//
menue.add(hilfeMenue);
this.setJMenuBar(menue);
}
private JToolBar symbolleiste() {
JToolBar leiste = new JToolBar();
MeinListener listener = new MeinListener();
JButton fileNewButton = new JButton();
fileNewButton.setActionCommand("new");
fileNewButton.setIcon(new ImageIcon("icons/new24.gif"));
fileNewButton.setToolTipText("creates a new document");
fileNewButton.addActionListener(listener);
leiste.add(fileNewButton);
JButton fileOpenButton = new JButton();
fileOpenButton.setActionCommand("load");
fileOpenButton.setIcon(new ImageIcon("icons/open24.gif"));
fileOpenButton.setToolTipText("Opens an existing document");
fileOpenButton.addActionListener(listener);
leiste.add(fileOpenButton);
JButton fileSaveButton = new JButton();
fileSaveButton.setActionCommand("save");
fileSaveButton.setIcon(new ImageIcon("icons/save24.gif"));
fileSaveButton.setToolTipText("Saves the current document");
fileSaveButton.addActionListener(listener);
leiste.add(fileSaveButton);
//
JButton hilfeInfoButton = new JButton();
hilfeInfoButton.setActionCommand("Info");
hilfeInfoButton.setIcon(new ImageIcon("icons/information24.gif"));
hilfeInfoButton.setToolTipText("Information about the current document");
hilfeInfoButton.addActionListener(listener);
leiste.add(hilfeInfoButton);
return (leiste);
}
//sollte es eigentlich beim Anklicken des Symbols anzeigen, zeigt es aber wenn es im Menü ausgewählt wird
//wie kann ich das gleiche bei mAnklicken des Symbols anzeigen lassen?
private void hilfeInfo() {
if(JOptionPane.showConfirmDialog(this, "MiniText Version 5.0. \nProgrammiert von: E.Gudz 2020", "Info", JOptionPane.DEFAULT_OPTION) == JOptionPane.DEFAULT_OPTION)
inputField.setText("");
}
private void fileNew() {
if(JOptionPane.showConfirmDialog(this, "do you really want to create a new document?", "New document", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
inputField.setText("");
}
private void fileLoad() {
EditorDialoge dialog = new EditorDialoge();
File file = dialog.oeffnenDialogZeigen();
if (file != null) {
try {
inputField.read(new FileReader(file), null);
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "There was a problem while loading.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
private void fileSave() {
EditorDialoge dialog = new EditorDialoge();
File file = dialog.speichernDialogZeigen();
if (file != null) {
try {
inputField.write(new FileWriter(file));
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Problem occured while saving.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
private void end() {
if(JOptionPane.showConfirmDialog(this, "Are you sure?", "Close the application", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
System.exit(0);
}
}
Java:
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
public class EditorDialoge {
//eine innere Klasse für den Filter
//sie erbt von der Klasse FileFilter
class MeinFilter extends FileFilter {
//die Methode accept() definiert den Filter
//hier für Dateien mit der Erweiterung .txt
//und für Ordner
@Override
public boolean accept(File f) {
//für den kompakteren Zugriff
String name = f.getName().toLowerCase();
if (f.isDirectory())
return true;
if (name.endsWith(".txt"))
return true;
return false;
}
//die Methode legt den Namen für den Filter fest
@Override
public String getDescription() {
return "Textdateien";
}
}
//die Methode zeigt den Öffnen-Dialog für eine Datei
public File oeffnenDialogZeigen() {
//einen neuen Dialog erzeugen
JFileChooser oeffnenDialog = new JFileChooser();
//den Filter setzen
oeffnenDialog.setFileFilter(new MeinFilter());
//den Filter für Alle Dateien deaktivieren
oeffnenDialog.setAcceptAllFileFilterUsed(false);
//den Dialog anzeigen und den Status holen
int status = oeffnenDialog.showOpenDialog(null);
//wurde auf Open geklickt, dann die ausgewählte Datei als Typ File zurückliefern
if (status == JFileChooser.APPROVE_OPTION)
return (oeffnenDialog.getSelectedFile());
else
return null;
}
//die Methode zeigt den Speichern-Dialog für eine Datei
//Sie arbeitet im Wesentlichen so wie die Methode für den Öffnen-Dialog
public File speichernDialogZeigen() {
//einen neuen Dialog erzeugen
JFileChooser speichernDialog = new JFileChooser();
//den Filter setzen
speichernDialog.setFileFilter(new MeinFilter());
//den Filter für Alle Dateien deaktivieren
speichernDialog.setAcceptAllFileFilterUsed(false);
//den Dialog anzeigen und den Status holen
int status = speichernDialog.showSaveDialog(null);
//wurde auf Save geklickt, dann die ausgewählte Datei als Typ File zurückliefern
if (status == JFileChooser.APPROVE_OPTION)
return (speichernDialog.getSelectedFile());
else
return null;
}
}