Hallo Liebe Java-Gemeinde,
ich habe ein Problem. Es soll in der Titelleiste der Pfad der gespeicherten Datei bzw. die Adresse der aufgerufenen Webseite angezeigt werden.
ich habe aber gerade so meine Probleme mit setTitle()...
Vielleicht kann mir jemand helfen oder eine Hilfestellung geben
Fragestellung:
Lassen Sie in der Titelleiste der Textverarbeitung hinter dem Text „MiniText“ zusätzlich den Namen und den vollständigen Pfad beziehungsweise die URL des aktuellen Dokuments anzeigen. Wenn das Dokument noch keinen Namen hat, soll in der Titelleiste „ohneName“ erscheinen.
Den Text in der Titelleiste können Sie mit der Methode setTitle() setzen.
LG Sebastian
ich habe ein Problem. Es soll in der Titelleiste der Pfad der gespeicherten Datei bzw. die Adresse der aufgerufenen Webseite angezeigt werden.
ich habe aber gerade so meine Probleme mit setTitle()...
Vielleicht kann mir jemand helfen oder eine Hilfestellung geben
Fragestellung:
Lassen Sie in der Titelleiste der Textverarbeitung hinter dem Text „MiniText“ zusätzlich den Namen und den vollständigen Pfad beziehungsweise die URL des aktuellen Dokuments anzeigen. Wenn das Dokument noch keinen Namen hat, soll in der Titelleiste „ohneName“ erscheinen.
Den Text in der Titelleiste können Sie mit der Methode setTitle() setzen.
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.html.HTMLEditorKit;
public class MiniText extends JFrame {
private JEditorPane eingabeFeld;
private HTMLEditorKit htmlFormat;
//für die Aktionen
//EA 11.1 erhält das Objekt infoAct
//EA 11.2 erhält die Objekte ausschneidenAct, kopierenAct und einfuegenAct
private MeineAktionen oeffnenAct, speichernAct, beendenAct, neuAct, druckenAct, speichernUnterAct, webOeffnenAct, infoAct, ausschneidenAct, kopierenAct, einfuegenAct;
private File datei;
private JPopupMenu kontext;
class MeineAktionen extends AbstractAction {
public MeineAktionen(String text, ImageIcon icon, String bildschirmtipp, KeyStroke shortcut, String actionText) {
super(text, icon);
putValue(SHORT_DESCRIPTION, bildschirmtipp);
putValue(ACCELERATOR_KEY, shortcut);
putValue(ACTION_COMMAND_KEY, actionText);
}
//die überschriebene Methode actionPerformed()
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("neu"))
dateiNeu();
if (e.getActionCommand().equals("laden"))
dateiLaden();
if (e.getActionCommand().equals("speichern"))
dateiSpeichern();
if (e.getActionCommand().equals("beenden"))
beenden();
if (e.getActionCommand().equals("drucken")) {
if (e.getSource() instanceof JButton)
drucken(false);
if (e.getSource() instanceof JMenuItem)
drucken(true);
}
if (e.getActionCommand().equals("speichernUnter"))
dateiSpeichernUnter();
if (e.getActionCommand().equals("webladen"))
webLaden();
//das ActionCommand für EA 11.1
if (e.getActionCommand().equals("info"))
//es wird die Methode info() aufgerufen
info();
}
}
class MeinKontextMenuListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
super.mouseReleased(e);
if (e.isPopupTrigger())
kontext.show(e.getComponent(), e.getX(), e.getY());
}
}
public MiniText(String text) {
super(text);
setLayout(new BorderLayout());
//die Aktionen erstellen
neuAct = new MeineAktionen("Neu...", new ImageIcon("icons/new24.gif"), "Erstellt ein neues Dokument", KeyStroke.getKeyStroke('N',InputEvent.CTRL_DOWN_MASK), "neu");
oeffnenAct = new MeineAktionen("Öffnen...", new ImageIcon("icons/open24.gif"), "Öffnet ein vorhandenes Dokument", KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK),"laden");
speichernAct = new MeineAktionen("Speichern", new ImageIcon("icons/save24.gif"), "Speichert das aktuelle Dokument", KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK), "speichern");
beendenAct = new MeineAktionen("Beenden", null, "", null, "beenden");
druckenAct = new MeineAktionen("Drucken...", new ImageIcon("icons/print24.gif"), "Druckt das aktuelle Dokument", KeyStroke.getKeyStroke('P',InputEvent.CTRL_DOWN_MASK), "drucken");
speichernUnterAct = new MeineAktionen("Speichern unter...", null, "", null, "speichernUnter");
webOeffnenAct = new MeineAktionen("Webseite...", new ImageIcon("icons/webComponent24.gif"), "Öffnet eine Webseite", null, "webladen");
//die Aktion für die EA 11.1
//es werden die Variablen für den Konstruktor der Klasse MeineAktionen übergeben
infoAct = new MeineAktionen("Info", new ImageIcon("icons/information24.gif"), "Information über aktuelles Dokument", KeyStroke.getKeyStroke('H',InputEvent.CTRL_DOWN_MASK), "info");
menu();
add(symbolleiste(), BorderLayout.NORTH);
kontextMenu();
eingabeFeld = new JEditorPane();
htmlFormat = new HTMLEditorKit();
eingabeFeld.setEditorKit(htmlFormat);
eingabeFeld.addMouseListener(new MeinKontextMenuListener());
add(new JScrollPane(eingabeFeld), BorderLayout.CENTER);
setExtendedState(MAXIMIZED_BOTH);
setMinimumSize(new Dimension(600,200));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
eingabeFeld.requestFocus();
}
private void menu() {
JMenuBar menue = new JMenuBar();
JMenu dateiMenue = new JMenu("Datei");
//das Menü Hilfe für EA 11.1
JMenu hilfeMenue = new JMenu("Hilfe");
JMenu dateiOeffnen = new JMenu("Öffnen");
dateiOeffnen.add(oeffnenAct);
dateiOeffnen.add(webOeffnenAct);
dateiMenue.add(neuAct);
dateiMenue.add(dateiOeffnen);
dateiMenue.add(speichernAct);
dateiMenue.add(speichernUnterAct);
dateiMenue.addSeparator();
dateiMenue.add(druckenAct);
dateiMenue.addSeparator();
dateiMenue.add(beendenAct);
//die Einträge werden direkt über Action-Objekte erzeugt
//der Eintrag Info für die EA 11.1
hilfeMenue.add(infoAct);
menue.add(dateiMenue);
//das gesamte Menü hinzufügen für EA 11.1
menue.add(hilfeMenue);
this.setJMenuBar(menue);
}
private JToolBar symbolleiste() {
JToolBar leiste = new JToolBar();
leiste.add(neuAct);
leiste.add(oeffnenAct);
leiste.add(webOeffnenAct);
leiste.add(speichernAct);
leiste.add(druckenAct);
leiste.addSeparator();
Action fettFormat = new StyledEditorKit.BoldAction();
fettFormat.putValue(Action.SHORT_DESCRIPTION, "Fett formatieren");
fettFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/bold24.gif"));
leiste.add(fettFormat);
Action kursivFormat = new StyledEditorKit.ItalicAction();
kursivFormat.putValue(Action.SHORT_DESCRIPTION, "Kursiv formatieren");
kursivFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/italic24.gif"));
leiste.add(kursivFormat);
Action unterstrichenFormat = new StyledEditorKit.UnderlineAction();
unterstrichenFormat.putValue(Action.SHORT_DESCRIPTION, "Unterstrichen formatieren");
unterstrichenFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/underline24.gif"));
leiste.add(unterstrichenFormat);
leiste.addSeparator();
Action linksAbsatz = new StyledEditorKit.AlignmentAction("Linksbündig", StyleConstants.ALIGN_LEFT);
linksAbsatz.putValue(Action.SHORT_DESCRIPTION, "Linksbündig ausrichten");
linksAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/alignLeft24.gif"));
leiste.add(linksAbsatz);
Action zentriertAbsatz = new StyledEditorKit.AlignmentAction("Zentriert", StyleConstants.ALIGN_CENTER);
zentriertAbsatz.putValue(Action.SHORT_DESCRIPTION, "Zentriert ausrichten");
zentriertAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/alignCenter24.gif"));
leiste.add(zentriertAbsatz);
Action rechtsAbsatz = new StyledEditorKit.AlignmentAction("Rechts", StyleConstants.ALIGN_RIGHT);
rechtsAbsatz.putValue(Action.SHORT_DESCRIPTION, "Rechtsbündig ausrichten");
rechtsAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/alignRight24.gif"));
leiste.add(rechtsAbsatz);
Action blockAbsatz = new StyledEditorKit.AlignmentAction("Blocksatz", StyleConstants.ALIGN_JUSTIFIED);
blockAbsatz.putValue(Action.SHORT_DESCRIPTION, "Im Blocksatz ausrichten");
blockAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/alignJustify24.gif"));
leiste.add(blockAbsatz);
//Platz einfügen für EA 11.2
leiste.addSeparator();
//EA 11.2
//die Symbole werden ebenfalls direkt über Action-Objekte erzeugt
//ein Symbol für das Ausschneiden
//über eine Standard-Aktion aus dem DefaultEditorKit
//die neue Aktion erzeugen
Action ausschneidenText = new DefaultEditorKit.CutAction();
//den Bildschirmtipp und das Symbol setzen
ausschneidenText.putValue(Action.SHORT_DESCRIPTION, "Text ausschneiden");
ausschneidenText.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/cut24.gif"));
//und zur Leiste hinzufügen
leiste.add(ausschneidenText);
//EA 11.2
//das Symbol für das Kopieren
Action kopierenText = new DefaultEditorKit.CopyAction();
kopierenText.putValue(Action.SHORT_DESCRIPTION, "Text kopieren");
kopierenText.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/copy24.gif"));
leiste.add(kopierenText);
//EA 11.2
//das Symbol für das Einfügen
Action einfuegenText = new DefaultEditorKit.PasteAction();
einfuegenText.putValue(Action.SHORT_DESCRIPTION, "Text einfügen");
einfuegenText.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/paste24.gif"));
leiste.add(einfuegenText);
//Platz einfügen für EA 11.1
leiste.addSeparator();
//EA 11.1
//das Symbol für die Info-Seite
leiste.add(infoAct);
return (leiste);
}
private void kontextMenu() {
kontext = new JPopupMenu();
kontext.add(neuAct);
kontext.add(oeffnenAct);
kontext.add(webOeffnenAct);
}
//die Methode für die Funktion Neu
private void dateiNeu() {
//eine Abfrage
if(JOptionPane.showConfirmDialog(this, "Wollen Sie wirklich ein neues Dokument anlegen?","Neues Dokument", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
//den Text löschen
eingabeFeld.setText("");
//datei wieder auf null setzen, damit klar ist, dass die Datei noch nicht gespeichert wurde
datei = null;
}
}
//die Methode zum Laden einer Datei
private void dateiLaden() {
//für den Dialog
MiniTextDialoge dialog = new MiniTextDialoge();
//die Datei über den Dialog Öffnen beschaffen
//es wird erst einmal in einer lokalen Variablen zwischengespeichert
File dateiLokal = dialog.oeffnenDialogZeigen();
//wenn eine Datei ausgewählt wurde, einlesen
//die Methode read() erzwingt eine Ausnahmebehandlung
if (dateiLokal != null) {
try {
eingabeFeld.read(new FileReader(dateiLokal), null);
//datei neu setzen
datei = dateiLokal;
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Beim Laden hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
}
//die Methode zum Speichern einer Datei
private void dateiSpeichern() {
//WICHTIG!!!!
//datei muss als Instanzvariable vereinbart werden
//wenn die Datei noch nicht gespeichert wurde, ist datei noch null
if (datei == null) {
//für den Dialog
MiniTextDialoge dialog = new MiniTextDialoge();
//die Datei über den Dialog Speichern beschaffen
datei = dialog.speichernDialogZeigen();
}
//ist datei ungleich null, dann wurde vorher schon einmal gespeichert
//bzw. im Dialog eine Datei ausgewählt
if (datei != null) {
//die Ausnahmebehandlung ist zwingend erforderlich
try {
//den Output-Stream für die Datei beschaffen
OutputStream output = new FileOutputStream(datei);
//das Dokument komplett speichern
htmlFormat.write(output, eingabeFeld.getDocument(), 0, eingabeFeld.getDocument().getLength());
}
catch (IOException | BadLocationException e) {
JOptionPane.showMessageDialog(this, "Beim Speichern hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
}
//die Methode öffnet den Speichern-Dialog und ruft die Methode dateiSpeichern() auf,
//wenn ein neuer Name ausgewählt wurde
private void dateiSpeichernUnter() {
//für den Dialog
MiniTextDialoge dialog = new MiniTextDialoge();
//die Datei über den Dialog Speichern beschaffen
File dateiLokal = dialog.speichernDialogZeigen();
//ist dateiLokal ungleich null, dann wurde ein neuer Name ausgewählt
if (dateiLokal != null) {
datei = dateiLokal;
dateiSpeichern();
}
}
private void beenden() {
if(JOptionPane.showConfirmDialog(this, "Sind Sie sicher?","Anwendung schließen", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
System.exit(0);
}
private void drucken(boolean dialogZeigen) {
try {
if (dialogZeigen == true)
eingabeFeld.print();
else
eingabeFeld.print(null, null, false, null, null, true);
}
catch (PrinterException e) {
JOptionPane.showMessageDialog(this, "Beim Drucken hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
private void webLaden() {
String adresse;
adresse = JOptionPane.showInputDialog(this, "Bitte geben Sie die URL der Seite ein:");
if (adresse != null) {
eingabeFeld.setText("");
try {
eingabeFeld.setPage(adresse);
datei = null;
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten.");
}
}
}
//die Methode info() zum Anzeigen von Informationen bzgl. der Textverarbeitung
private void info() {
JOptionPane.showMessageDialog(this, "MiniText Version 4.0. \nProgrammiert von: Peter Programmer 2018.", "Info", JOptionPane.INFORMATION_MESSAGE, new ImageIcon("icons/information24.gif"));
}
private void titelleiste() {
String adresse;
if (adresse != null) {
setTitle(adresse);
// datei neu setzen
datei = adresse;
}else
setTitle("ohne Namen");
}
}
Java:
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
public class MiniTextDialoge {
//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 den Erweiterungen .html und .htm
//sowie 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(".htm"))
return true;
if (name.endsWith(".html"))
return true;
return false;
}
//die Methode legt den Namen für den Filter fest
@Override
public String getDescription() {
return "HTML-Dateien";
}
}
//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 OK 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 OK geklickt, dann die ausgewählte Datei als Typ File zurückliefern
if (status == JFileChooser.APPROVE_OPTION)
return (speichernDialog.getSelectedFile());
else
return null;
}
}
Java:
public class MiniTextMain {
public static void main(String[] args) {
new MiniText("MiniText");
}
}
LG Sebastian