Speichern-Dialog geht nicht weg

Status
Nicht offen für weitere Antworten.

_antje_

Mitglied
Hallo,

Nach dem Speichern, was funktionier, geht der Dialog nicht wieder vollstänsig weg.
wohin muß das dispose()?

Danke für jeden Hinweis.

Quellcode der Datei, bei der gespeichert werden soll:
Code:
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class AlgFenster extends JInternalFrame
{
   static int openFrameCount = 0;
   static final int xOffset=20,yOffset=20;
   static JTextArea text=new JTextArea();
   private JScrollPane jsp=new JScrollPane();
   private Container cp=getContentPane();

   static JLabel statusleiste   = new JLabel();

   static String aktDateiname = null;
   static JFileChooser fileDialog = new JFileChooser();

   AlgFenster()
   {
      super("Algorithmus Nr." + (++openFrameCount),
         true, //Größe änderbar
         true,//schliessbar
         true,//maximierbar
         true);//minimierbar
      setSize(350,350);
      setLocation(350+xOffset*openFrameCount,yOffset*openFrameCount);

      text.setFont(new Font("SansSerif",Font.PLAIN,14));
      text.setBackground(Color.WHITE);

      //text.setText("public class Anwendung \n{  public static main(String[] argv) \n  { \n\n\n  }\n}");

      jsp.getViewport().add(text,null);
      cp.add(jsp,BorderLayout.CENTER);

      statusleiste.setText(" ");
      cp.add(statusleiste, BorderLayout.SOUTH);

      fileDialog.addChoosableFileFilter(new JavaSourceFilter());

   }

   static boolean algDateiSpeichernUnter(StructX s)
   {
       if (JFileChooser.APPROVE_OPTION == fileDialog.showSaveDialog(s))
       {
           aktDateiname = fileDialog.getSelectedFile().getPath();
           return algDateiSpeichern();
        }
        else {  return false; }
   }

   static boolean algDateiSpeichern()
   {
      if (aktDateiname == null)
      {
         return algDateiSpeichernUnter(new StructX());
      }

      try
      {
         File datei = new File(aktDateiname);
         FileWriter out = new FileWriter(datei);
         text.write(out);
         out.close();

         statusleiste.setText("Gespeichert in " + aktDateiname);

         return true;

       }
       catch (IOException e)
       {
         statusleiste.setText("Fehler beim Speichern von " + aktDateiname);
       }

       return false;
   }

   class JavaSourceFilter   extends javax.swing.filechooser.FileFilter
   {
      public boolean accept(File f)
      {
         boolean accept=f.isDirectory();
         if(!accept)
         {
            String suffix = getSuffix(f);
            if(suffix!=null) accept=suffix.equals("java");
         }
         return accept;
      }

      public String getDescription()
      {
         return "Java-Quelltexte (*.java)";
      }

      private String getSuffix(File f)
      {
         String s=f.getPath();
         String suffix=null;
         int i=s.lastIndexOf('.');
         if(i>0 && i<s.length() -1) suffix =s.substring(i+1).toLowerCase();
         return suffix;
      }
   }

   static void createAlgFrame()
   {
      AlgFenster algFenster= new AlgFenster();
      algFenster.setVisible(true);
      StructX.desktop.add(algFenster);
      try
      {
         algFenster.setSelected(true);
      }catch(java.beans.PropertyVetoException e){}
   }

}



EDIT von L-ectron-X: Code-Tags eingefügt
 

L-ectron-X

Gesperrter Benutzer
Du hast, so wie ich sehe, keine Events im JInternalFrame verarbeitet, die Dir ein Schließen ermöglichen, weder über einen Button noch über das kleine X in der rechten oberen Ecke des JInternalFrames.

dispose() Kann etwa so aufgerufen werden. Das trifft für einen JDialog z.B. zu, sollte auch bei einem JInternalFrame funktionieren. Du kannst innerhalb des Konstruktors für den JInternalFrame schreiben:
Code:
addWindowListener(new java.awt.event.WindowAdapter() {
  public void windowClosing(java.awt.event.WindowEvent e) {   
    dispose();
  }
}
Das wird dann ausgeführt, wenn Du auf das X rechts oben klickst, um das Fenster zu schließen.
Eigentlich sollte das auch ohne diese Implementierung gehen, ich habe es mal ausprobiert. Dazu folgenden einfachen Code:
Code:
import javax.swing.*;

public class MyFrame extends JFrame {
  public MyFrame(String title) {
    super(title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(400,300);
    setLocationRelativeTo(null);
    setVisible(true);
    getContentPane().add(new MyJInternalFrame("JInternalFrame"));
  }

  class MyJInternalFrame extends JInternalFrame {
    MyJInternalFrame(String title) {
      super(title, true, true);
      show();
    }
  }

  public static void main(String[] args) {
    new MyFrame("MyFrame");
  }
}
Das Beispiel ist voll funktionstüchtig und benötigt keine weitere Implementierung, weder zum Schließen des JFrames noch zum Schließen des JInternalFrames. Nicht einmal die AWT-Packages müssen importiert werden.
 

Angel

Aktives Mitglied
@_antje_:

hi :wink:

erst mal danke für dein Codeschnipsel, da war nämlich was drin, was ich bis heute alleine nicht hinbekommen hatte, nämlich der "FileChooseFilter".

hab ihn bei mir implementiert, nur hab ich noch ein kleines Prob:

1. wie bekomme ich den standardfilter "Alle Dateien" weg? Ich will das wirklich nur Dateien in meinem Format (also spezifische Dateiendung) verarbeitet werden könnnen.

2. wie kann ich das laden fremder Endungen allgemein verhindern?

wirklich nur auf die Dateiendung bezogen, einen Fehlerabfang für den internen Aufbau einer Datei habe ich drin.


Danke im voraus :wink:
 

_antje_

Mitglied
Hallo,

wie ich nur ein bestimmtes Dateiformat statt alle speichern kann, weiß ich auch noch nicht. Bis jetzt gebe ich es im Namen mit ".Format" an. Geht bei dir der Dialog nach dem Speichern wieder weg?

Tschau
Antje
 

Angel

Aktives Mitglied
_antje_ hat gesagt.:
Hallo,

wie ich nur ein bestimmtes Dateiformat statt alle speichern kann, weiß ich auch noch nicht. Bis jetzt gebe ich es im Namen mit ".Format" an. Geht bei dir der Dialog nach dem Speichern wieder weg?

Tschau
Antje

bei mir selbst, unabhängig von deinen Code, ja. Sollte eigentlich auch automat. passieren.

so sieht das ganze bei mir aus:
Code:
public final class SaveDlg extends JFrame //begin SaveDlg Class
      {
        private String selectedFile = null;
        private String modusstring = null;
        private final int returnVal;

        public SaveDlg(final int modus) //modus = 0 (Open); modus = 1 (Save)
        {
          //Swing FileDialog
          final JFileChooser chooser = new JFileChooser();
          chooser.addChoosableFileFilter(new JavaSourceFilter());
          chooser.setAcceptAllFileFilterUsed(false);

          if (modus==0)
          {
            modusstring = "Bitte wählen Sie eine Datei aus:";
            chooser.setDialogTitle(modusstring);
            returnVal = chooser.showOpenDialog(null);
          }
          else
          {
              modusstring = "Bitte geben Sie einen neuen Dateinamen ein:";
              chooser.setDialogTitle(modusstring);
              returnVal = chooser.showSaveDialog(null);
          }
          
          if (returnVal == JFileChooser.APPROVE_OPTION)
            {
              selectedFile = "" + chooser.getSelectedFile();

              if (modus == 0)
                Filereader(selectedFile);

              if (modus == 1)
              {
                if(selectedFile.endsWith(".alien")==false)
                  selectedFile=selectedFile+".alien";
                  
                Filewriter(selectedFile);
              }
            }

          //AWT Filedialog
          /*FileDialog fDlg = new FileDialog(this,modusstring,modus);

          fDlg.show();

          //Test, ob Benutzer-Auswahl und beschaffen des String
          if (fDlg.getFile() != null)
          {
            selectedFile = fDlg.getDirectory() + File.separator + fDlg.getFile();

            if (modus == 0)
              Filereader(selectedFile);

            if (modus == 1)
              Filewriter(selectedFile);
          }*/

        }


        public void Filereader(final String datpfad)
        {
          final File fi = new File(datpfad);
          try
          {
            final ObjectInputStream in = new ObjectInputStream(new FileInputStream(fi));

            fileload=true;

            gui.dispose();

            gui.setSize((Dimension)(in.readObject()));
            pixelgröße = in.readInt();
            lebensanzorg = in.readInt();
            durchlauf = in.readInt();
            w = in.readInt();
            h = in.readInt();

            gui.pbtoben.removeAll();
            gui.punten.removeAll();
            gui.pcan.removeAll();

            gui.create();
            gui.actions();

            gui.repaint();
            gui.setVisible(true);

            aliencan.setSize(w,h);
            aliensVor = (Alien[][]) in.readObject();
            aliencan.repaint2();

            in.close();
            linfo.setForeground(ok);
            linfo.setText("Info: Datei wurde erfolgreich gelesen!");
          }
          catch (Exception ex)
          {
            System.out.println(ex);

            gui.dispose();

            gui.setSize(700,500);

            gui.pbtoben.removeAll();
            gui.punten.removeAll();
            gui.pcan.removeAll();

            gui.create();
            gui.actions();

            gui.repaint();
            gui.setVisible(true);

            pixelgröße=4;
            aliencan.setSize(1, 1); //Simuliert Größenänderung des Canvas, damit Neuzeichnung erzwungen
            aliencan.repaint2();
            linfo.setForeground(Color.red);
            linfo.setText("Fehler: Es wurde eine Datei mit ungültigen Format gewählt!");
          }
        }

        public void Filewriter(final String datpfad){
          final File fi = new File(datpfad);
          try
          {
            final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fi));

            //Framegröße
            out.writeObject(new Dimension(gui.getWidth(),gui.getHeight()));

            //Pixelgröße
            //out.writeObject(new Integer(pixelgröße));
            out.writeInt(pixelgröße);

            //lebensanzorg
            out.writeInt(lebensanzorg);

            //Durchlaufanzahl
            out.writeInt(durchlauf);

            //Canvasgröße
            //w
            out.writeInt(w);
            //out.writeObject(new Integer(w));
            //h
            //out.writeObject(new Integer(h));
            out.writeInt(h);

            //Alienfeld
            out.writeObject(aliensVor);

            out.close();
            linfo.setForeground(ok);
            linfo.setText("Info: Datei wurde erfolgreich gespeichert!");
          }
          catch (Exception ex)
          {
            System.out.println(ex);
            linfo.setForeground(Color.red);
            linfo.setText("Fehler: Datei konnte nicht gespeichert werden!");
          }
        }

      }//End of SaveDlg Class


Illuvatar hat gesagt.:
JFileChooser#setAcceptAllFileFilterUsed(boolean b)
dürfte das richtige sein.

danke, klappt wunderbar :wink:
 

_antje_

Mitglied
Hallo,

wo kommt deine gui-Variable her?

Ich habe das JFileChooser#setAcceptAllFileFilterUsed(false) bei mir eingefügt. Jetzt erscheint zwar nicht mehr "alle Dateien", aber beim Speichern muß ich immer noch .Format angeben.

Woran kann es liegen, dass mein Dialog nicht weggeht, auch nicht wenn ich FileDialo.dispose() aufrufe.

Wie kann ich in eine vorhandene Datei, Text an einer bestimmten Stelle einfügen und speichern?

Kann mir nochmal jemand helfen, bitte?

Tschau
Antje
 

Angel

Aktives Mitglied
_antje_ hat gesagt.:
Hallo,

1. wo kommt deine gui-Variable her?

2. Ich habe das JFileChooser#setAcceptAllFileFilterUsed(false) bei mir eingefügt. Jetzt erscheint zwar nicht mehr "alle Dateien", aber beim Speichern muß ich immer noch .Format angeben.

3. Woran kann es liegen, dass mein Dialog nicht weggeht, auch nicht wenn ich FileDialo.dispose() aufrufe.

zu 1.:

die kommt von weiter oben, da die klasse "SaveDlg" eine innere Klasse ist.

zu 2.:

schau dir noch mal meinen Quellcode an, diese Funktion habe ich bereits (mit meiner programmspezifischen Dateiendung) implementiert.

zu 3.:

k.a.

wenn du willst, schick mal deinen kompletten programmcode bzw. das komplette Projekt an meine mail:

angel@3dwin.net

da kann ich das vielleicht mal richtig nachvollziehen und dir dann vielleicht sagen worans liegt :wink:
 

Angel

Aktives Mitglied
ähmm, in welcher IDE hastn das geschrieben? *g*

habs jetzt in JBuilder reingemacht, das package eingebunden, habe aber trotzdem noch haufen fehler.

wo müssten die ganzen bilderdateien hin? sowas hab ich noch nie gemacht, sorry

EDIT:

hat sich erledigt, hab vergessen den package namen spezifisch bei JBuilder vergessen reinzuschreiben *g*


nur das mit den bildern weiß ich eben nich....
 

_antje_

Mitglied
Ich habs mit eclipse gemacht.
Die Bilder müssen eigentlich in das Projekt selber nicht mit eingebunden werden, die müssen nur im selben Pfad stehen, wie die java-Dateien.

Danke, fürs angucken.
Das Speichern des Dialogs, findest du in der Datei AlgFenster.

Tschau
Antje
 

Angel

Aktives Mitglied
bilder gehn nich, aber egal *g*

einen bestimmten code musste ich ausklammern, da ich sonst das Programm nicht starten kann....

das der speichern-dialog als leiche (grauer Fleck) auf der Grafikobfläche zurückbleibt, hat ne andere ursache, du müsstest glaub ich einfach noch mal neuzeichnen, aber den zustand wies vorm öffnen des speichern-dialog war.

hab das allerdings schon versucht, nur blick ich bei deinem quelltext mit den zusammenhängen noch nicht wirklich durch.........
 

_antje_

Mitglied
danke, dass du es versuchst hast.
Ich guck mal, wie ich das neuzeichnen hinbekomme.
Hast du repaint() ausprobiert?
 

Angel

Aktives Mitglied
naja, wollte in der klasse algfenster ein Objekt von der Klasse Leinwand bilden und über das objekt die repaint aufrufen, die erwartete aber parameter, du scheinst die orginale repaint überschrieben zu haben, obwohl ich sie gar ne bei Leinwand finde, aber naja....

ich habe absolut keinen durchblick, das prob is, das du so gut wie nix kommentiert hast........

sorry :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
F Output Stream / File Dateien / Speichern AWT, Swing, JavaFX & SWT 13
D String als Textdatei in ausgewähltem Speicherplatz speichern AWT, Swing, JavaFX & SWT 32
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S URLS speichern von Internetseiten AWT, Swing, JavaFX & SWT 3
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
P Adressbuch Werte speichern AWT, Swing, JavaFX & SWT 21
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
B TableView als PDF speichern AWT, Swing, JavaFX & SWT 8
cool_brivk24 libGDX Welt speichern AWT, Swing, JavaFX & SWT 0
R Scene speichern AWT, Swing, JavaFX & SWT 7
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
A Swing Wie Daten in der Form speichern? Array oder ArrayList AWT, Swing, JavaFX & SWT 2
I JavaFX formatierter Text in PDF speichern AWT, Swing, JavaFX & SWT 4
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
M Kamerabilder in ein Ordner speichern AWT, Swing, JavaFX & SWT 12
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
S JavaFX Fenstergrösse automatisch Speichern und Laden AWT, Swing, JavaFX & SWT 4
J Swing Fenstereinstellungen speichern AWT, Swing, JavaFX & SWT 2
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
J Swing JTable speichern AWT, Swing, JavaFX & SWT 2
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
S Panelzeichnung speichern AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
G Subimage von BufferedImage speichern AWT, Swing, JavaFX & SWT 4
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
D JPanel Graphic2D als BufferedImage Speichern AWT, Swing, JavaFX & SWT 5
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
B Bildverlust bei Speichern in .jar-Archiv AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Bildteile in ein anderes Bild speichern AWT, Swing, JavaFX & SWT 12
B Datenübergabe zwischen Tabs und Daten speichern AWT, Swing, JavaFX & SWT 2
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
J JTree speichern AWT, Swing, JavaFX & SWT 4
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
T Modell als XML Speichern / Laden AWT, Swing, JavaFX & SWT 9
P TextField beim klicken von JButton speichern AWT, Swing, JavaFX & SWT 17
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
B Zustand eines GUI speichern AWT, Swing, JavaFX & SWT 8
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
J Swing JTable-Daten Speichern und bei zeilen-änderung beibehalten. AWT, Swing, JavaFX & SWT 6
T SWT:Datei speichern / öffnen AWT, Swing, JavaFX & SWT 6
T speichern funktioniert,aber öffnen nicht AWT, Swing, JavaFX & SWT 2
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
M Position eines JLabels speichern? AWT, Swing, JavaFX & SWT 3
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
S JTable - Sortierung beibhalten / Speichern. AWT, Swing, JavaFX & SWT 3
C Checkbox-zustände in einem JFrame speichern AWT, Swing, JavaFX & SWT 8
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
K Swing Komponente als Bild speichern AWT, Swing, JavaFX & SWT 11
E Profilsichten speichern und dynamsich erzeugen?! AWT, Swing, JavaFX & SWT 2
N JTable direkt editierenund in Datenbanken speichern AWT, Swing, JavaFX & SWT 5
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
A Programmieren einer Agenda mit einer Liste (als Applet und .txt zum Speichern) AWT, Swing, JavaFX & SWT 7
B JTextPane formatierten Inhalt speichern AWT, Swing, JavaFX & SWT 2
R TextField auslesen & in Objekteigenschaften speichern AWT, Swing, JavaFX & SWT 22
B textdatei speichern AWT, Swing, JavaFX & SWT 9
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
jgh Speichern von User-GUI-Einstellungen AWT, Swing, JavaFX & SWT 2
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
N gezeichnete Graphiken speichern und wieder anzeigen AWT, Swing, JavaFX & SWT 8
M AWT Datei auf server speichern und beschreiben AWT, Swing, JavaFX & SWT 7
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
U Wo eingeloggten Benutzer "speichern" AWT, Swing, JavaFX & SWT 10
J Aus einer JList den Inhalt als Textdatei speichern AWT, Swing, JavaFX & SWT 15
C Bild in einer Datenbank speichern? AWT, Swing, JavaFX & SWT 7
Z JTable: Speichern probleme AWT, Swing, JavaFX & SWT 12
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
B JEditorPane - Text und Graphik in HTML speichern AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben