Titelleiste soll Pfad ausgeben

Albi_2020

Mitglied
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.


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
 
Kritisch:

Java:
private void titelleiste() {
    String adresse;
    if (adresse != null) { // FIXME: Wird niemals true
        setTitle(adresse);
        // datei neu setzen
        datei = adresse;
    } else
        setTitle("ohne Namen");
}

Kleinere Improvements:

Java:
    private void dateiSpeichern() {
        if (datei == null) {
            // ...
        }
        if (datei != null) { // TODO: else
            //...
        }
    }

Java:
    private void drucken(boolean dialogZeigen) {
        try {
            if (dialogZeigen == true) // TODO: Vergleich weglassen
        // ...
    }
 
Kritisch:

Java:
private void titelleiste() {
    String adresse;
    if (adresse != null) { // FIXME: Wird niemals true
        setTitle(adresse);
        // datei neu setzen
        datei = adresse;
    } else
        setTitle("ohne Namen");
}

Kleinere Improvements:

Java:
    private void dateiSpeichern() {
        if (datei == null) {
            // ...
        }
        if (datei != null) { // TODO: else
            //...
        }
    }

Java:
    private void drucken(boolean dialogZeigen) {
        try {
            if (dialogZeigen == true) // TODO: Vergleich weglassen
        // ...
    }
Danke erstmal für deine Antwort.

Leider bin ich immer noch so schlau wie vorher.

Der kritische Teil war nur eine Überlegung. Hatte ich aber wieder verworfen.
Der Pfad ist ja beim Start des Programms "MiniText" - ohne Namen
Beim Speichern oder Speichern unter würde er sich ändern in "MiniText" - Name + Pfad

Allerdings ist mir nicht ganz klar , wie die Titelleiste gesetzt wird. Der Pfad wird ja als File gespeichert. Die Ausgabe erfolgt ja sicherlich als String

vermutlich wird es etwa so sein File.toString()

Aber wo wird die Titelleiste gesetzt bzw. wie....ich hatte einige versuche aber immer etliche Exceptions erhalten
 
Habe etwas versucht:

String titelleiste = datei.toString();
setTitle("MiniText" + titelleiste);

Funktioniert auch, aber es erscheint nur der Pfad so:
MiniText/Users/Name/Desktop/abc.htm

Aber soll eigentlich so sein:
MiniText + Users/Name/Desktop/abc.htm
 
Du gibst doch die Zeichen vor, die es sein soll. titelleiste enthält ja den String: "MiniText/Users/Name/Desktop/abc.htm"


Die Leerzeichen und das + das Du bisher hast, sind ja keine Zeichen die ausgegeben werden sondern Java Operationen.
Du hast also ein sogenanntes String Literal und an das wird der Inhalt der Variablen dran gehängt. Das Ergebnis wird dann zum Titel gemacht.

Wenn Du vor der Datei nicht nur "MiniText" sondern auch noch ein Leerzeichen und ein + und ein erneutes Leerzeichen haben willst, dann musst Du das entsprechend angeben. Du hast ja derzeit den festen String "MiniText". Daraus kannst Du dann "Minitext + " machen.
 
Guten Abend zusammen, ich würd gern diesen Thread nochmal ansprechen, da ich gerade vor dem selben Problem bei dieser Aufgabe sitze.

Ich hab nun folgende Methode erstellt:

Java:
private void titelleiste() {
        String titel = datei.toString();
        if (titel!=null)
            setTitle("Minitext " + titel);
        else
            setTitle("OhneName");
        
    }

Jedoch bekomme ich hier nur Fehler angezeigt, beim Ausführen.
Nämlich:

Java:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.io.File.toString()" because "this.datei" is null
    at de.fernschulen.minitext.MiniText.titelleiste(MiniText.java:445)
    at de.fernschulen.minitext.MiniText.<init>(MiniText.java:158)
    at de.fernschulen.minitext.MiniTextMain.main(MiniTextMain.java:5)

Wer kann helfen? Ich werde grad nicht schlau daraus...
 
Erst einmal ist datei null wenn Du die Methode aufrufst. Du musst also sicher stellen, dass datei einen gültigen Wert zugewiesen bekommt.

Und dann solltest Du einfach einmal schauen, was denn die Klasse File alles an Methoden bietet. Wenn die toString() Methode nicht das liefert, das Du haben willst, dann musst Du Dir selbst etwas zusammen bauen, das Du brauchst.
 
Ich bin es nun nochmal ganz anders angegangen.
Ich möchte, dass die Titelleiste geändert wird sobald gespeichert wird, also habe ich nun keine neue Methode angelegt sondern die Methode dateiSpeichern() um setTitle ergänzt. So wird der Titel beim Speichern direkt geändert.
So sieht das ganze nun aus:

Java:
private void dateiSpeichern() {
        if (datei == null) {
            MiniTextDialoge dialog = new MiniTextDialoge();
            datei = dialog.speichernDialogZeigen();
        }
        if (datei != null) {
            try {
                OutputStream output = new FileOutputStream(datei);
                htmlFormat.write(output, eingabeFeld.getDocument(), 0, eingabeFeld.getDocument().getLength());
                setTitle("MiniText " + datei.toString());
            }
            catch (IOException | BadLocationException e) {
                JOptionPane.showMessageDialog(this, "Beim Speichern hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

Nun soll ja aber auch, solange es keinen Pfad gibt, also nicht gespeichert wurde, "ohneNamen" anzeigen. Hier bin ich mir nicht sicher ob mein Weg der richtige ist oder ob ich es nicht in einer Methode integrieren kann. Ich hab nun im Konstruktor von MiniText setTitle eingefügt. OhneNamen.
So wird beim Start ohneNamen angezeigt und beim Speichern verändert. Kann man das so stehen lassen?

Java:
public MiniText() {
        setLayout(new BorderLayout());
        setTitle("MiniText - OhneNamen");
        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");
        infoAct = new MeineAktionen("Info...", new ImageIcon("icons/information24.gif"), "Zeigt Informationen zur Textverarbeitung an",null, "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();
    }
 
Wenn ich es richtig verstehe, dann soll zu verschiedenen, definierten Zeitpunkt die Titelleiste aktualisiert werden? Dann würde ich genau das einfach machen:
Java:
private void updateTitle() {
    if (datei == null) {
        // ...
    } else {
        // ...
    }
}
Diese Methode kann man dann an x-beliebiger Stelle aufrufen: im Konstrukor, nach dem Speichern, Öffnen etc.
 
Wenn ich es richtig verstehe, dann soll zu verschiedenen, definierten Zeitpunkt die Titelleiste aktualisiert werden? Dann würde ich genau das einfach machen:
Java:
private void updateTitle() {
    if (datei == null) {
        // ...
    } else {
        // ...
    }
}
Diese Methode kann man dann an x-beliebiger Stelle aufrufen: im Konstrukor, nach dem Speichern, Öffnen etc.
Danke, mein erster Versuch war dann wohl doch nicht so verkehrt, ich hätte die Methode nur an die richtigen Stellen setzen müssen. Nun klappt alles.
 
Hi, das Thema ist zwar schon älter, wollte aber mein Lösungsvorschlag präsentieren. Danke an alle Kommentatoren 👍

Java:
//HIER DIE LOESUNG ZU AUFGABE 1.3!
    private void updateTitle() {
        if (datei == null) {
            setTitle("ohne Namen");
        } else
            
            setTitle("MiniText + " + datei.getName()+ " + " + datei.toString());
        }
 

Neue Themen


Zurück
Oben