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
 

MoxxiManagarm

Top Contributor
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
        // ...
    }
 

Albi_2020

Mitglied
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
 

Albi_2020

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

kneitzel

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

melaniemueller

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

kneitzel

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

melaniemueller

Aktives Mitglied
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();
    }
 

mihe7

Top Contributor
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.
 

melaniemueller

Aktives Mitglied
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());
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
llabusch Titelleiste Dokumentenname und Pfad/URL anzeigen AWT, Swing, JavaFX & SWT 2
C JFrame ohne Titelleiste, aber mit Borders AWT, Swing, JavaFX & SWT 2
kodela Swing Icon in der Titelleiste "festnageln" AWT, Swing, JavaFX & SWT 6
K Swing Titelleiste zweckentfremden AWT, Swing, JavaFX & SWT 5
F Titelleiste von JDialog ausblenden mit Synthetica L&F AWT, Swing, JavaFX & SWT 2
S Swing JInternalFrame: Titelleiste entfernen AWT, Swing, JavaFX & SWT 5
hdi JFrame Titelleiste anpassen & setDefaultCloseOperation() AWT, Swing, JavaFX & SWT 3
janrode Schmale Titelleiste für JDialog AWT, Swing, JavaFX & SWT 3
G Sonderzeichen auf Titelleiste AWT, Swing, JavaFX & SWT 7
K Titelleiste ihrer Funktionen berauben AWT, Swing, JavaFX & SWT 6
G JFrame Titelleiste AWT, Swing, JavaFX & SWT 2
G Dialog ohne Titelleiste AWT, Swing, JavaFX & SWT 8
G Uhrzeit in der Titelleiste eines Fensters anzeigen? AWT, Swing, JavaFX & SWT 9
J Problem mit eigener Titelleiste und MouseMotionListener AWT, Swing, JavaFX & SWT 2
M JDialog ohne Titelleiste AWT, Swing, JavaFX & SWT 2
welterde Menü in der Titelleiste des JInternalFrame AWT, Swing, JavaFX & SWT 4
T JDialog - Titelleiste immer aktiv lassen AWT, Swing, JavaFX & SWT 4
L Hilfebutton in Titelleiste oder gute Alternative AWT, Swing, JavaFX & SWT 2
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
M Frame ohne Titelleiste AWT, Swing, JavaFX & SWT 6
C Icon in der Titelleiste und Taskbar AWT, Swing, JavaFX & SWT 2
S Titelleiste ändern AWT, Swing, JavaFX & SWT 12
A Titelleiste entfernen AWT, Swing, JavaFX & SWT 4
T JInternalFrame ohne Titelleiste AWT, Swing, JavaFX & SWT 2
D Fenster ohne Titelleiste AWT, Swing, JavaFX & SWT 2
C Höhe der Titelleiste in JInternalFrame AWT, Swing, JavaFX & SWT 4
G Icon in der Titelleiste von JDialog setzen AWT, Swing, JavaFX & SWT 11
bummerland Fenster ohne Buttons ín der Titelleiste AWT, Swing, JavaFX & SWT 4
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
G Eintrag soll nur einmal in Listview zu sehen sein AWT, Swing, JavaFX & SWT 3
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
W JavaFX CSS - was soll mir das sagen? AWT, Swing, JavaFX & SWT 2
D JavaFX Menu soll nicht bei jedem Click verschwinden AWT, Swing, JavaFX & SWT 8
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
V Swing Button soll unter anderem Button sein AWT, Swing, JavaFX & SWT 2
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
windl Warum soll ich zu JavaFX? AWT, Swing, JavaFX & SWT 18
H Java3D, ViewP Translattform soll sich nach einerformgroup richten. AWT, Swing, JavaFX & SWT 5
S Hauptfenster soll geöffnet bleiben AWT, Swing, JavaFX & SWT 4
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
TheJavaKid DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
D Swing jSlider soll selber weiterwandern, je nach zeit der musik AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
S JVM von Oracle/Sun soll für AWT/SWING Elemente die die Optimierungen der NVidia Treiber verwenden AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
X Swing Bei Buttonklick soll PopupMenu erscheinen AWT, Swing, JavaFX & SWT 2
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
2 Anfänger problem: Buttenklick soll reagieren AWT, Swing, JavaFX & SWT 9
D JTextField soll nur Integer als Eingabewert annehmen AWT, Swing, JavaFX & SWT 5
N JFreeChart: Plot soll mit skalieren AWT, Swing, JavaFX & SWT 5
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
R Button soll nach dem er gedrückt wurde auf setVisible(false) gestellt werden. AWT, Swing, JavaFX & SWT 3
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben