# Layout + Inhalt einer JTable speichern



## MorassoHD (10. Okt 2016)

Hallo,

(ich hoffe ich poste das im richtigen Forum, denn ich habe mich gerade hier regestriert)
ich habe ein Problem und zwar möchte ich den Inhalt meiner JTable speichern.
Das Layout und der Inhalt sollen natürlich in der gespeicherten Datei vorhanden sien.
Ich scheitere beim JFileChooser.
Mein schönes Programmchien dient als Bericht Manager.
Zu jedem tag nur Stichpunkte.


Hier mein code:

```
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.TableColumn;

public class PraktikumsberichtManager extends JFrame implements ActionListener{
   
   
    JTable table1;
    JScrollPane s;
    JMenuItem item1;

    public PraktikumsberichtManager(){
       
        String[] columnNames = {"Tag",
                "Datum",
                "Aufgaben / was getan wurde"};
       
        Object[][] data = {
               {"Montag","3.10.16",""},
               {"Dinstag","4.10.16",""},
               {"Mitwoch","5.10.16",""},
               {"Donerstag","6.10.16",""},
               {"Freitag","7.10.16",""},
               {"Montag","10.10.16",""},
               {"Dintsag","11.10.16",""},
               {"Mitwoch","12.10.16",""},
               {"Donserstag","13.10.16",""},
               {"Freitag","14.10.16",""}};
       
    table1 = new JTable(data, columnNames);
    table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   
   
    final int INDEX_COLUMN1 = 0;
    TableColumn col = table1.getColumnModel().getColumn(INDEX_COLUMN1);
    col.setPreferredWidth(80);
    final int INDEX_COLUMN2 = 1;
    TableColumn col2 = table1.getColumnModel().getColumn(INDEX_COLUMN2);
    col2.setPreferredWidth(65);
    final int INDEX_COLUMN3 = 2;
    TableColumn col3 = table1.getColumnModel().getColumn(INDEX_COLUMN3);
    col3.setPreferredWidth(305);
   
    s = new JScrollPane(table1);
   
    JMenuBar JMB = new JMenuBar();   
    JMenu JM1 = new  JMenu("menu");
   
    item1 = new JMenuItem("Speichern");
    item1.addActionListener(this);
   
    JMB.add(JM1);
    JM1.add(item1);
   
    JPanel panel = new JPanel();
    panel.add(s);
   
    this.setJMenuBar(JMB);
    this.setTitle("Praktikumsberichtmanager");   
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(480,280);
    this.add(panel);
       
       
    }

    public static void main(String[] args) {

        new PraktikumsberichtManager();
    }
   
    public void actionPerformed(ActionEvent e) {
       
        if (e.getSource() == item1) {
            JFileChooser fchooser = new JFileChooser();

            fchooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fchooser.setMultiSelectionEnabled(false);

            int returnVal = fchooser.showSaveDialog(fchooser);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                try {
                    File file = fchooser.getSelectedFile();
                    FileWriter fWriter = new FileWriter(file.getAbsolutePath(), true);

                    table1.write(fWriter);

                    fWriter.close();

                } catch (IOException grummel) {
                    System.err.println("error");
                }

            }
}
    }
}
```


----------



## MorassoHD (10. Okt 2016)

Habe im internet nichts hilfreiches gefunden


----------



## Harry Kane (10. Okt 2016)

MorassoHD hat gesagt.:


> Habe im internet nichts hilfreiches gefunden


Wonach hast du denn gesucht?
Stichwort: Serialisierung


----------



## MorassoHD (10. Okt 2016)

Nach: Inhalt und Layout einer JTable speichern.
Und anderen Formulierungen.
Ich habe schon endliche seiten durchsucht und andere Foren haben mir auch nicht weitergeholfen 

Um die serialisierung also Text Größe ändern und Farbe wollte ich mich jetzt kömmern


----------



## Robat (10. Okt 2016)

> Ich scheitere beim JFileChooser.



Wo hängt es denn genau? Bzw was klappt denn nicht so wie du es willst?


----------



## MorassoHD (10. Okt 2016)

Robat hat gesagt.:


> Wo hängt es denn genau? Bzw was klappt denn nicht so wie du es willst?


also der JFileChooser soll ja die tabelle speichern. ich möchte das verzeichniss auswählen.
nur beim drücken auf Speichern wird dieser nicht ausgeführt. (Aktionzeugs sind ja schon da).


MorassoHD hat gesagt.:


> ```
> public void actionPerformed(ActionEvent e) {
> 
> if (e.getSource() == item1) {
> ...



wass muss da rein?


----------



## Robat (10. Okt 2016)

Ich weiß nicht ob das sofort dein Problem beheben wird, aber:



> ```
> File file = fchooser.getSelectedFile();
> FileWriter fWriter = new FileWriter(file.getAbsolutePath(), true);
> ```



Änder das mal ab in:


```
FileWrite fWrite = new FileWriter(fChooser.getSelectedFile() + ".txt", true); // Wobei ich nicht weiß, wofür du das true setzt?
```


Du brauchst die Instanz nicht wirklich.
Das die Fileerweiterung änderst du natürlich in deine ab - also .txt, .bin, .doc - what ever.

Die Erweiterung musst du aber immer angeben 



*EDIT: *Gibt es denn eine Fehlermeldung?


----------



## VfL_Freak (10. Okt 2016)

Moin,


MorassoHD hat gesagt.:


> wass muss da rein?


WAS muss WO rein ?? 

Gruß Klaus


----------



## Robat (10. Okt 2016)

Vfl_Freak,

was er damit sagen will ist, dass der Code in actionPeformed scheinbar nicht funktioniert.
Das *was *bezieht sich also auf: Wo ist der Fehler


----------



## Thallius (10. Okt 2016)

Ich glaube eher er denkt es gibt eine Methode saveJTable() die einfach alles speichert was in seiner Tabelle steht und es am besten gleich noch richtig formatiert....


----------



## VfL_Freak (10. Okt 2016)

Robat hat gesagt.:


> was er damit sagen will ist, dass der Code in actionPeformed scheinbar nicht funktioniert.
> Das *was *bezieht sich also auf: Wo ist der Fehler


Ja ja, ist mir grundlegend schon klar 
Die Ironie sollte ihn nur darauf hinweisen, klare und konkrete Fragen zustellen und nicht was dahin zuklatschen !!
War wohl verschwendet .... 

Gruß Klaus


----------



## MorassoHD (10. Okt 2016)

sorry


----------



## MorassoHD (10. Okt 2016)

Robat hat gesagt.:


> *EDIT: *Gibt es denn eine Fehlermeldung?




Ja, aber ich denke die ist wegen etwas anderem.


----------



## VfL_Freak (10. Okt 2016)

MorassoHD hat gesagt.:


> Ja, aber ich denke die ist wegen etwas anderem.


Verrätst Du auch, WELCHE Fehlermeldung Du bekommst ?? 
Isses denn so schwer ..... ??


----------



## Robat (10. Okt 2016)

```
table1.write(fWriter);
```

berichtigt mich aber sollte es nicht 

```
fWrite.write(table1)
```

sein?

du willst ja mittels FileWriter was schreiben und nicht mittels table1


----------



## Harry Kane (10. Okt 2016)

Da eine JTable keine Methode write hat, ist table1.write(fWriter) schonmal Käse.
Eine FileWriter hat zwar mehrere write-methoden, keine hat aber eine JTable als Parameter.
Ansonsten verweise ich auf meinen ersten Post.
Und wenn es XML sein muss: XMLEncoder


----------



## MorassoHD (11. Okt 2016)

Ich werde das nun anders machen:
und zwar werde ich für jeden tag ein extra fersten machen wo man dann alles eintragen kann.

Eine andere Möglichkeit wäre, das dass JTable beim schließen den Inhalt behält und beim öffnen wieder anzeigt. Also ohne einer speichern und laden Funktion. das währe vielleicht nicht so kompliziert. ich habe in Texteditor programmiert und da habe ich es so hinbekommen (also mit dem Speichen).
Das hat Prima funktioniert ist aber auch eine andere Geschichte.


----------



## VfL_Freak (11. Okt 2016)

Moin,


MorassoHD hat gesagt.:


> ein extra fersten


was soll das denn sein ?? 



MorassoHD hat gesagt.:


> Eine andere Möglichkeit wäre, das dass JTable beim schließen den Inhalt behält und beim öffnen wieder angezeigt wird. Also ohne einer speichern und laden Funktion.


Wo soll denn der Inhalt bleiben, wenn Du die table schließt und Du den Inhalt NICHT speicherst?

Gruß Klaus


----------



## MorassoHD (11. Okt 2016)

VfL_Freak hat gesagt.:


> was soll das denn sein ??


Also ich möche ein main Fenster, in dem für jeder tag ein button ist.
Wenn man auf den butten für z.B. den ersten tag also "Tag 1" dann öffnet sich ein fenster welces eine Tabelle anzeigt mit drei spalten und einer Zeile. (das ist jetzt meine neue Idee) wäre das komplizierter?

Also...
Die Tabelle für z.B. Tag 1, soll den Inhalt speichern, wenn ich das Fenster schleiße.
(das Main Fenster bleibt immer offen)
Also der Inhalt soll immer gespeichert werden.
z.B. für jeden tag eine Datei (Speicheort erstmal egal oder sagen wir auf dem Desktop)
Das Programm speichert nur nicht wenn es abstürzt (oder der PC) was ja auch logisch ist.

Wäre diese Methode besser oder alles in einer Tabelle?


----------



## VfL_Freak (11. Okt 2016)

Moin,


MorassoHD hat gesagt.:


> Also ich möche ein main Fenster, in dem für jeder tag ein button ist.
> Wenn man auf den butten für z.B. den ersten tag also "Tag 1" dann öffnet sich ein fenster welces eine Tabelle anzeigt mit drei spalten und einer Zeile. (das ist jetzt meine neue Idee) wäre das komplizierter?


Lies Dich mal hier ein: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html



MorassoHD hat gesagt.:


> Die Tabelle für z.B. Tag 1, soll den Inhalt speichern, wenn ich das Fenster schleiße.
> (das Main Fenster bleibt immer offen) Also der Inhalt soll immer gespeichert werden.
> z.B. für jeden tag eine Datei (Speicheort erstmal egal oder sagen wir auf dem Desktop)
> Das Programm speichert nur nicht wenn es abstürzt (oder der PC) was ja auch logisch ist.


Sicher ist sowas machbar ... wenn Du den Tabelleninhalt in eine Textdatei speichern willst, dann mach es (IMHO wäre hier eine Datenbank deutlich sinnvoller)
Dann poste mal Deinen Ansatz und stell' konkrete Fragen dazu (fertigen Code wirst Du allenfalls hier bekommen: http://www.java-forum.org/forum/private-stellangebote-und-stellensuche-von-usern.97/)




MorassoHD hat gesagt.:


> Wäre diese Methode besser oder alles in einer Tabelle?


das kommt darauf an ... 

Gruß Klaus


----------



## MorassoHD (11. Okt 2016)

Danke!


----------



## MorassoHD (11. Okt 2016)

VfL_Freak hat gesagt.:


> .


Ich hätte noch de frage...
ich möchte das das Mainfenster unsichtbar haben solange ein anderes Fenster offen ist also ich drücke auf ein Button und dieser setzt den boolesch auf false und wenn das andere Fenster geschlossen wird wird dieser auf true gesetzt. Das mainfenster wird wieder sichtbar. wie setze ich das um?
Muss ich eine neue class machen?


----------



## VfL_Freak (11. Okt 2016)

Moin,


MorassoHD hat gesagt.:


> ich möchte das das Mainfenster unsichtbar haben solange ein anderes Fenster offen ist also ich drücke auf ein Button und dieser setzt den boolesch auf false und wenn das andere Fenster geschlossen wird wird dieser auf true gesetzt. Das mainfenster wird wieder sichtbar. wie setze ich das um?
> Muss ich eine neue class machen?


Ohne Dir zu nahe treten zu wollen - es ist leider sehr schwer Deine Texte zu lesen und vor allem zu verstehen !!

Meinst Du sowas?
Du klickst auf einen Button im Mainfenster, daraufhin soll dies solange nicht mehr sichtbar sein, bis das den den Klick aufgehende fenster wieder geschlossen wird??
Dafür bräuchtest Du nicht mal 'nen boolschen Wert!
Die Sichtbarkeit kannst Du ja mit der Methode _*setVisible(*_*[true|false]*_*)*_ regeln!

Ich weiß nun nicht, wie dein entsprechender Code ausschaut, aber sobald Du also den Button anklickst wirst Du ja vermutlich eine zugehörige _*actionPerformed*_-Methode ansprechen, oder? Dann setz' dort das MainFenster auf _visible(false)_ und anschließend wieder auf _visible(true)_!
Dafür sollte das aufpoppende Fenster idealerweise *modal* sein !

Gruß Klaus


----------



## MorassoHD (12. Okt 2016)

VfL_Freak hat gesagt.:


> Ohne Dir zu nahe treten zu wollen - es ist leider sehr schwer Deine Texte zu lesen und vor allem zu verstehen !!


Tut mir leid. 
Ich versuch es nochmal:
Das MainFenster hat 10 Buttons für jeden tag einen.
Wenn ich auf den Button "Tag 1" drücke, öffnet sich ein weiteres Fenster.
Nun soll das MainFenster _visible(false)_ also nicht sichtbar sein, denn man könnte immer mehr Fenster öffnen. Jetzt sieht man nurnoch das Fenster für den ersten tag.
In dem fenster gibt es ein button, welcher dich zurück zum MainFenster bringt. Also das fenster für Tag 1 schließt sich:

```
if (e.getSource() == BackToMenu) { // BackToMenu heißt der Button
                    dispose();
                    PraktikumsberichtManager.visiblel(true); // das soll das mainfenster wieder sichtbar machen
}
```



Hier der code vom MainFenster:
WARNUNG: Das MainFenster lässt sich nicht so einfach schließen und rückt immer in den Vordergrund wegen der while schleife ganz unten! Dafür habe ich einen BugExit Button eingebaut welcher oben links im MainFenster ist.
Beim aufprobieren musst du das Paket "Manager" nennen. (oder du änderst das einfach)

```
package manager;

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.TableColumn;

public class PraktikumsberichtManager extends JFrame implements ActionListener{
  
    public static boolean visiblel(boolean b){

        return b;
    }
  
    JButton Bugexit;
    JButton Tag1b;
    JButton Tag2b;
    JButton Tag3b;
    JButton Tag4b;
    JButton Tag5b;
    JButton Tag6b;
    JButton Tag7b;
    JButton Tag8b;
    JButton Tag9b;
    JButton Tag10b;
    JPanel panel;
    JLabel label1;
    JLabel label2;
    JPanel panelTag1;
    JPanel panelTag2;
    JPanel panelTag3;
    static boolean visibe  = visiblel(true) ;
    public PraktikumsberichtManager(){
              
        panel = new JPanel();
        panel.setLayout(null);
      
        label1 = new JLabel ("1. Woche");
        label1.setBounds(20 , 60 , 80 , 50);
      
        label2 = new JLabel ("2. Woche");
        label2.setBounds(160 , 60 , 80 , 50);
      
        Bugexit = new JButton ("bugexit");
        Bugexit.setBounds(20, 10 , 80 , 40);
        Bugexit.addActionListener(this);
      
        Tag1b = new JButton ("Tag 1");
        Tag1b.setBounds(20 , 100 , 80 , 45);
        Tag1b.addActionListener(this);
      
        Tag2b = new JButton ("Tag 2");
        Tag2b.setBounds(20 , 150 , 80 , 45);
        Tag2b.addActionListener(this);
      
        Tag3b = new JButton ("Tag 3");
        Tag3b.setBounds(20 , 200 , 80 , 45);
        Tag3b.addActionListener(this);
      
        Tag4b = new JButton ("Tag 4");
        Tag4b.setBounds(20 , 250 , 80 , 45);
        Tag4b.addActionListener(this);
      
        Tag5b = new JButton ("Tag 5");
        Tag5b.setBounds(20 , 300 , 80 , 45);
        Tag5b.addActionListener(this);
      
        Tag6b = new JButton ("Tag 6");
        Tag6b.setBounds(160 , 100 , 80 , 45);
        Tag6b.addActionListener(this);
      
        Tag7b = new JButton ("Tag 7");
        Tag7b.setBounds(160 , 150 , 80 , 45);
        Tag7b.addActionListener(this);
      
        Tag8b = new JButton ("Tag 8");
        Tag8b.setBounds(160 , 200 , 80 , 45);
        Tag8b.addActionListener(this);
      
        Tag9b = new JButton ("Tag 9");
        Tag9b.setBounds(160 , 250 , 80 , 45);
        Tag9b.addActionListener(this);
      
        Tag10b = new JButton ("Tag 10");
        Tag10b.setBounds(160 , 300 , 80 , 45);
        Tag10b.addActionListener(this);
      
      
        panel.add(Bugexit);
        panel.add(Tag1b);
        panel.add(Tag2b);
        panel.add(Tag3b);
        panel.add(Tag4b);
        panel.add(Tag5b);
        panel.add(Tag6b);
        panel.add(Tag7b);
        panel.add(Tag8b);
        panel.add(Tag9b);
        panel.add(Tag10b);
        panel.add(label1);
        panel.add(label2);
        this.setTitle("Hauptmenue");
        this.setSize(300, 400);
        this.add(panel);
    }

    public void actionPerformed(ActionEvent a) {
            if(a.getSource() == Tag1b){
                new Tag1();
                visiblel(false);
            }
          
//            if (a.getSource() == Tag2b){
//                new Tag2();
//            }
//            if (a.getSource() == Tag3b){
//                new Tag3();
//            }
//            if (a.getSource() == Tag4b){
//                new Tag4();
//            }
//            if (a.getSource() == Tag5b){
//                new Tag5();
//            }
//            if (a.getSource() == Tag6b){
//                new Tag6();
//            }
//            if (a.getSource() == Tag7b){
//                new Tag7();
//            }
//            if (a.getSource() == Tag8b){
//                new Tag8();
//            }
//            if (a.getSource() == Tag9b){
//                new Tag9();
//            }
//            if (a.getSource() == Tag10b){
//                new Tag10();
//            }
            if (a.getSource() == Bugexit){
                System.exit(0);
            }
          
          
    }

      
    public static void main (String[] args){
      
      
        PraktikumsberichtManager s =  new PraktikumsberichtManager();
        while(true){
        if (visibe == true){
                s.setVisible(true);
              
            }else{
                s.setVisible(false);
              
            }
        }
      
    }
}
```

und hier der Code für den 1. Tag (dürfte zum ausprobieren ausreichen):

```
package manager;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import javax.swing.*;
import javax.swing.table.TableColumn;

public class Tag1 extends JFrame implements ActionListener{

    JPanel panel;
    JButton BackToMenu;
    JTextArea TAbericht;
    JTextArea tag;
    JTextArea datum;
    JMenuBar mbar;
    JMenu menu1;
    JMenuItem Speichern;
    JMenuItem Laden;
    JLabel LTag;
    JLabel LDatum;
    JScrollPane scroll;
    JMenu menu2;
  
    public Tag1(){
      
        mbar = new JMenuBar();
        menu1 = new JMenu("menu");
        Speichern = new JMenuItem("Speichern");
        Speichern.addActionListener(this);
        Laden = new JMenuItem("Laden");
        Laden.addActionListener(this);
        TAbericht = new JTextArea();
        TAbericht.setBounds(5 , 60 , 470 , 365);
        panel = new JPanel();
        panel.setLayout(null);
        BackToMenu = new JButton("zum Hauptmenu");
        BackToMenu.setBounds( 350 , 0 , 125, 50);
        BackToMenu.addActionListener(this);
        tag = new JTextArea();
        tag.setBounds(125 , 10 , 65 , 20);
        datum = new JTextArea();
        datum.setBounds(250 , 10 , 65 , 20);
        LTag = new JLabel ("Tag:");
        LTag.setBounds(95 , 10 , 50 , 20);
        LDatum = new JLabel ("Datum:");
        LDatum.setBounds(205 , 10 , 50 , 20);
      
        menu1.add(Speichern);
        menu1.add(Laden);
        mbar.add(menu1);
        panel.add(datum);
        panel.add(tag);
        panel.add(BackToMenu);
        panel.add(TAbericht);
        panel.add(LTag);
        panel.add(LDatum);
        this.setJMenuBar(mbar);
        this.setTitle("Tag 1");
        this.setSize(500,500);
        this.setVisible(true);
        this.add(panel);
    }
          
    public static void main(String[] args) {
                new Tag1();
            }
    public void actionPerformed(ActionEvent e) {
                if (e.getSource() == Speichern) {
                    JFileChooser fchooser = new JFileChooser();
                    fchooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                    fchooser.setMultiSelectionEnabled(false);
                    int returnVal = fchooser.showSaveDialog(fchooser);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        try {
                            File file = fchooser.getSelectedFile();
                            FileWriter fWriter = new FileWriter(file.getAbsolutePath(), true);
                            TAbericht.write(fWriter);
                            fWriter.close();
                        } catch (IOException grummel) {
                            System.err.println("fehler");
                        }
                    }
                }
              
                if (e.getSource() == BackToMenu) {
                    dispose(); // hier muss dan hin das has Hauptfenster wieder sichtbar wird

                }
              
            }
}
```
Ja, und die Formatierung ist nicht die Beste.


----------



## VfL_Freak (12. Okt 2016)

Moin,

Ausprobieren werde ich DEN Code mit Sicherheit nicht!!
Aber mal einige Anmerkungen, die mir so aufgefallen sind!!



MorassoHD hat gesagt.:


> if(e.getSource() == BackToMenu)  // BackToMenu heißt der Button
> {
> dispose();
> PraktikumsberichtManager.visiblel(true); // das soll das mainfenster wieder sichtbar machen
> }


(a) Was macht denn die Funktion _dispose()_ ?? 
(b) Eigene Methode möglichst NIE so wie vorhandene Methoden benennen!! irgendwann kommst Du garaniert durcheinander !!
(c) Was soll denn Deiner Meinung nach das _visiblel(true)_ bewirken?? 
Du übergibst einen bool'schen Wert, der aber von der Methode _visiblel _(ganz mieser Name im Übrigen) lediglich zurückgegeben würde, so Du ihn denn abfragen würdest, was Du aber nicht tust! 
Und folgendes wäre ebenfalls ziemlich sinnfrei :

```
boolean myValue = PraktikumsberichtManager.visiblel(true);
```
Hierdurch würde lediglich _myValue_ auf den Übergabewert _true_ gesetzt ....

Du musst schon was wie

```
Tag1.setVisible( true );
```
machen, um _Tag1_ sichtbar zu machen!

Dann


MorassoHD hat gesagt.:


> public static boolean visiblel(boolean b)
> {
> return b;
> }


Wie gesagt, diese Methode ist ziemlich sinnfrei!
Sie würde lediglich den an sie übergeben Wert zurückgeben - gesetzt den Fall, er würde auch abgefragt!!
Bei Deinem Aufruf "_visiblel(false);_" weiter unten passiert genau gar nix !!

Ähnlich gilt für Deine main-Methode!!


MorassoHD hat gesagt.:


> ```
> public static void main( String[] args )
> {
> PraktikumsberichtManager s =  new PraktikumsberichtManager();
> ...


Nur: Du hast hier eine böse Endlosschleife, da die Schleifenbedingung ja nie FALSE werden kann!

Sein mir bitte nicht böse, aber Du solltest Dich wirklich erstmal mit einem Grundlagenbuch zu Java beschäftigen und nicht gleich wild mit GUIs loslegen !! 
Gruß Klaus


----------



## Robat (12. Okt 2016)

@VfL_Freak: Wieso nimmst du mir immer die Worte aus dem Mund? 

Ich bin da übrigens ganz seiner Meinung. Ich verstehe sowieso nicht ganz warum es die Methode visiblel() gibt. Du hast ja schon eine vordefinierte Methode setVisible.

Funktioniert denn dein Code so wie er soll?

Auch an dich meine Predigt die ich jeden gebe:
Guckt euch gewisse Java-Konventionen an wie zB: 
-Variablennamen, Methodennamen, Namensgebung im allgemeinen
- Trennung von Logik und gui (mvc)
- es wird zu wenig kommentiert - in einem Jahr Weißt du nicht mehr was du da gemacht hast 

Grüße 
Robert


----------



## VfL_Freak (12. Okt 2016)

Robat hat gesagt.:


> @VfL_Freak: Wieso nimmst du mir immer die Worte aus dem Mund?


weil ich einfach schneller bin ???


----------



## MorassoHD (12. Okt 2016)

ich möchte nicht tag 1 sichtbar machen sondern das mainfenster unsichtbar, solange ich das tag1 Fenster nicht über den Button "zum hauptmenue" geschlossen wird.
Das sieht so scheiße aus weil ich nicht weiß wie ich das machen soll. deshalb frage ich euch.
Habe ich meine zeit hier verschwendet? Ich dachte, das Forum ist da um nach Hilfe zu fragen und das man sich Vorschläge von anderen holen kann. Oder ist das Forum dazu da, gesagt zu bekommen was ich lesen soll? Ich hab nicht danach gefragt.

Ich wollte wissen was ich ändern muss oder wie es geht.
Ich dachte ihr könnt mir das richtig zeigen, damit ich das Lerne.

Danke für eure Bemühungen.


----------



## VfL_Freak (12. Okt 2016)

Nochmal: 
hier hat niemand ein Problem damit, Dir auf konkrete Fragen zu antworten oder Dich hier und da auf den richtigen Weg zu schubsen!
Aber wir haben hier schnell gemerkt, dass Dir die meisten Grundlagen fehlen, um eine GUI zu programmieren!!

Aber eine komplette Einführung in das Thema kann und will hier niemand leisten!
Zumal wir auch nicht seriös einschätzen können, welchen Kenntnisstand Du nun wirklich hast!!
Deswegen der Hinweis, Dich erstmal mit grundlagen zu beschäftigen und nicht sofort mit relativ komplexen GUIs anzufangen!

Gruß Klaus


----------



## Robat (12. Okt 2016)

Eigentlich müsste es so funktionieren:

Wenn du FirstDayFrame aufrufst, übergibst du einfach eine Instanze von deinem MainFrame als Parameter in den Konstruktor.
Damit kannst du in deiner FirstDayFrame Class eine Instanze erzeugen - und über dieser Instanze dann setVisible(true) aufrufen - damit du es sichtbar machen kannst.

*EDIT: In meinem Beispiel verwende ich, um Buttons zu identifizieren, die setActionCommand(String s) und getActionCommand() Methode. Du kannst es natürlich auch mit e.getSource = NAME machen  

*


Spoiler: MainFenster





```
public class ...
{
...

actionPerformed(...)
{
    if(e.getActionCommand().equals(".."))
   {
        this.setVisible(false);
        FirstDayFrame = new FirstDayFrame(this);
   }
}

}
```






Spoiler: FirstDayFrame





```
public class ...
{
...

MainFrame mainFrame;

public FirstDayFrame(MainFrame mainFrame)
{
    this.mainFrame = mainFrame;
}

actionPerformed(...)
{
    if(e.getActionCommand().equals(".."))
   {
        this.setVisible(false);
        mainFrame.setVisible(true);
   }
}

}
```




Die Anregungen die wie dir hier geben sind weder böse gemeint noch solltest du dich dadurch auf den Schlips getreten fühlen.
Ich finde es nur wichtig, dass Programmieren sich gegenseitig auf _"Fehler"_ hinweisen und Verbesserungsvorschläge anbieten.
Nimm sie an - oder nicht. Es soll bloß helfen 

Gruß
Robert


----------



## Robat (12. Okt 2016)

Um meinen vorherigen Post besser zu verstehen hier mal ein Beispiel:



Spoiler: MainFrame





```
public class MainFrame extends JFrame implements ActionListener {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new MainFrame().setVisible(true);
        // TODO code application logic here
    }
  
    public MainFrame()
    {
       init();
    }
  
    private void init()
    {
        this.setSize(new Dimension(500, 500));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Bla1");
      
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(2,2));
        this.add(p);
      
        JButton btn = new JButton("Bla");
        btn.setActionCommand("bla");
        btn.addActionListener(this);
        btn.setBounds(50, 50, 100, 100);
      
        p.add(btn);
  
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      
        if(e.getActionCommand().equals("bla"))
        {
            this.setVisible(false);
            BlaFrame b = new BlaFrame(this);
        }
      
    }
  
}
```






Spoiler: BlaFrame





```
public class BlaFrame extends JFrame implements ActionListener
{

    /////////////////////////////////////
    // Constances
    /////////////////////////////////////    
    private static final String TITLE = "BlaFrame";
   
    /////////////////////////////////////
    // Fields
    /////////////////////////////////////
    MainFrame f;
    /////////////////////////////////////
    // Constructor
    /////////////////////////////////////
    public BlaFrame(MainFrame f)
    {
        this.f = f;
        // initialization goes here
        init();
    }

    /////////////////////////////////////
    // Methodes
    /////////////////////////////////////
    /*
     *  Initialization goes here
     */
     private void init()
     {
          this.setSize(new Dimension(500, 500));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Bla2");
       
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(2,2));
        this.add(p);
       
        JButton btn = new JButton("Blub");
        btn.setActionCommand("blub");
        btn.addActionListener(this);
        btn.setBounds(50, 50, 100, 100);
       
        p.add(btn);
       
        this.setVisible(true);
   
     }

    @Override
    public void actionPerformed(ActionEvent e) {
       
        if(e.getActionCommand().equals("blub"))
        {
            this.setVisible(false);
            f.setVisible(true);
        }
       
    }
}
```




Gruß
Robert


----------

