# Zwei Fenster



## Paul15 (28. Jun 2015)

Hallo
Ich hab jetzt schon seit zwei Tagen erfolgslos probiert zwei Windows zu erstellen. Hab zwar etliches gefunden aber nie das richtige


```
public class JFrame1 extends JFrame {

    private JPanel contentPane;


    /**
     * Launch the application.
     */

    
    public static void main(String[] args) {
        
        
        
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    
                    
                    JFrame1 frame = new JFrame1();
                    frame.setVisible(true);
                    
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    
    
    
    public JFrame1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1000, 750);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel Error = new JLabel();
        Error.setBounds(500,5,100,15);
        Error.setText("");
        contentPane.add(Error);
}
```
(Natürlich nur ein kleiner Auszug)

Ich habe eine 2D Arraylist erstellt die ich dann im zweiten Fenster per Tabelle ausgeben will.

LG Paul


----------



## camelCase90 (28. Jun 2015)

Was genau ist jetzt die Frage? 

Öffnet sich dein Fenster aus dem Quellcode? Wie hast Du vor ein zweites zu öffnen? Per Button-Klick aus dem ersten oder zeitgleich?

Ich hab deine Fragestellung nicht ganz verstanden.

Btw. erbt man nicht von JFrame, wenn man es nicht verändern bzw auch wirklich erweitern will.


----------



## Paul15 (28. Jun 2015)

1. Ja es öffnet sich
2. Es soll immer nebenbei offen sein
3. Wie ersell ich ein zweites Fenster
4. Versteh ich nicht


----------



## camelCase90 (28. Jun 2015)

2. bleibt es, wenn Du es nicht über setVisible(false); änderst
3. jenachdem in welchen Zusammenhang Du das zweite Fenster öffnen willst. Willst Du es direkt beim Programm-Start mit öffnen, dann musst Du die Main-Methode dementsprechend erweitern. (JFrame myFrame = new JFrame();...)
4. Man erbt nur von einer Klasse, wenn man vor hat die neue Kindsklasse im Gegensatz zu der Elternklasse auch wirklich zu erweitern.


----------



## Paul15 (28. Jun 2015)

2. ok
4. Ich hab ne globale Variable


----------



## camelCase90 (28. Jun 2015)

In Java gibt es keine globale Variablen. Du meinst vermutlich das JPanel Attribut.

Du veränderst bzw. erweiterst aber keine Methoden oä., damit es sinnvoll wäre von der Klasse zu erben.


----------



## Paul15 (28. Jun 2015)

Wie sieht das dann genau aus??


----------



## camelCase90 (28. Jun 2015)

Du erstellst eine normale Klasse und in der Main-Methode erstellst Du ein neues JFrame-Objekt. Damit kannst Du dann auch alle Methoden aufrufen (die setVisible-Methode ua.)


----------



## Paul15 (28. Jun 2015)

Wie ruf ich dann den JFrame auf früher hab ich das so gemacht:
	
	
	
	





```
EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    
                    
                    JFrame1 frame = new JFrame1();
                    frame.setVisible(true);
                    
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    
    
    
    public JFrame1() {
```

aber ich müsste es ja mit frame aufrufen oder??


----------



## camelCase90 (28. Jun 2015)

Du musst einfach nur JFrame1 frame = new JFrame1; durch JFrame frame = new JFrame(); ersetzen. alle Methodenaufrufe innerhalb deines Konstrukters musst du dann in die Main-Methode verschieben und über deiner frame Variablen aufrufen.

frame.setDefaultCloseOperation(JFrame...) z.B.


----------



## Paul15 (28. Jun 2015)

also

JFrame frame = new JFrame();
für den ersten Frame

JFrame frame2 = new JFrame();
für den zweiten Frame


----------



## camelCase90 (28. Jun 2015)

Exakt


----------



## Paul15 (28. Jun 2015)

Wenn ich dass dan aufrufe per
	
	
	
	





```
public frame() {
```
bekomm ich ein leeres Fenster


----------



## camelCase90 (28. Jun 2015)

Poste mal dein neuen Code.


----------



## Paul15 (28. Jun 2015)

Ok mach ich gleich


----------



## Paul15 (28. Jun 2015)

```
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.border.EmptyBorder;

import static java.lang.System.out;
import javax.swing.JDesktopPane;

public class JFrame1 extends JFrame {

    private JPanel contentPane;
    //private JTextField;
    //private JLabel;
    double a;

    /**
     * Launch the application.
     */
    
    int cheese = 0;
    int pommes=0;
    int salat=0;
    
    boolean[][] zähler1 = new boolean [3][5];
    
    //arrayList
    
    ArrayList<Boolean> zeile0 = new ArrayList<>();
    ArrayList<Boolean> zeile1 = new ArrayList<>();
    ArrayList<Boolean> zeile2 = new ArrayList<>();
    ArrayList<Boolean> zeile3 = new ArrayList<>();        
    ArrayList<Boolean> zeile4 = new ArrayList<>();
    ArrayList<Boolean> zeile5 = new ArrayList<>();
    ArrayList<Boolean> zeile6 = new ArrayList<>();
    ArrayList<Boolean> zeile7 = new ArrayList<>();
    ArrayList<Boolean> zeile8 = new ArrayList<>();
    ArrayList<Boolean> zeile9 = new ArrayList<>();
    
    
    public static void main(String[] args) {
        
        
        
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    
                    
                    JFrame frame = new JFrame();
                    frame.setVisible(true);
                    
                    JFrame frame2 = new JFrame();
                    frame2.setVisible(true);
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    
    
    
    public frame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1000, 750);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel Error = new JLabel();
        Error.setBounds(500,5,100,15);
        Error.setText("");
        contentPane.add(Error);
        
        
        
        //Checkbox Cheeseburger
        
        JCheckBox bxCheese = new JCheckBox("Cheese",true);
        bxCheese.setBounds(110,5,80,15);
        contentPane.add(bxCheese); 
        
        JCheckBox bxBurger = new JCheckBox("Burger",true);
        bxBurger.setBounds(110,25,80,15);
        contentPane.add(bxBurger); 
        
        JCheckBox bxSalsa = new JCheckBox("Salsa",true);
        bxSalsa.setBounds(110,45,80,15);
        contentPane.add(bxSalsa); 
        
        JCheckBox bxOnion = new JCheckBox("Onion",true);
        bxOnion.setBounds(200,5,80,15);
        contentPane.add(bxOnion); 
        
        JCheckBox bxCucumber = new JCheckBox("Cucumber",true);
        bxCucumber.setBounds(200,25,100,15);
        contentPane.add(bxCucumber); 
        
        JCheckBox bxSauce = new JCheckBox("Sauce",true);
        bxSauce.setBounds(200,45,80,15);
        contentPane.add(bxSauce); 
        
        
        
        
        JLabel lblCheeseburger = new JLabel("Cheeseburger: "+cheese);
        lblCheeseburger.setBounds(500,10,150,100);
        contentPane.add(lblCheeseburger);
        
        JLabel lblSalat = new JLabel("Salat: "+salat);
        lblSalat.setBounds(500,20,200,100);
        contentPane.add(lblSalat);
        
        JLabel lblPommes = new JLabel("Pommes: "+pommes);
        lblPommes.setBounds(500,30,250,100);
        contentPane.add(lblPommes);
        
        JToggleButton erw1 = new JToggleButton("Erweitern");
        
        erw1.setBounds(500,500,100,100);
        contentPane.add(erw1);
        
    JButton btnPommes = new JButton ("Pommes");
    btnPommes.setBounds(5, 130, 100, 50);
    btnPommes.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {        }
    });
    contentPane.add(btnPommes);
   
    
    
    JButton btnSalat = new JButton ("Salat");
    btnSalat.setBounds(5, 70, 100, 50);
    btnSalat.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {        }
    });
    contentPane.add(btnSalat);
    
    
    
    JButton btnCheesburger = new JButton ("Cheeseburger");
    btnCheesburger.setBounds(5, 5, 100, 50);
    btnCheesburger.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {    cheese = cheese+1;
        
            /* in Array "zähler" einfügen
        
            zähler1[0][0] = bxCheese.isSelected();
            zähler1[0][1] = bxSalsa.isSelected();
            zähler1[0][2] = bxBurger.isSelected();
            zähler1[0][3] = bxOnion.isSelected();
            zähler1[0][4] = bxCucumber.isSelected();
            zähler1[0][5] = bxSauce.isSelected();
            */
            
            
            
            /*    Erklärung der Zeilen
             * zeile0 = Cheese
             * zeile1 = Salsa
             * zeile2 = Burger
             * zeile3 = Onion
             * zeile4 = Cucumber
             * zeile5 = Sauce
             */
        
            //in ArrayList "zeile"einfügen
            
            zeile0.add(bxCheese.isSelected());
            zeile1.add(bxSalsa.isSelected());
            zeile2.add(bxBurger.isSelected());
            zeile3.add(bxOnion.isSelected());
            zeile4.add(bxCucumber.isSelected());
            zeile5.add(bxSauce.isSelected());
            
            //Zurücksetzten
            
            bxCheese.setSelected(true);
            bxSalsa.setSelected(true);
            bxBurger.setSelected(true);
            bxOnion.setSelected(true);
            bxCucumber.setSelected(true);
            bxSauce.setSelected(true);
            bxBurger.setSelected(true);
        
        
        lblCheeseburger.setText("Cheeseburger: "+cheese);
        }
    });
    contentPane.add(btnCheesburger);
    
    
    }
}
```


----------



## camelCase90 (28. Jun 2015)

Du hast mich anscheinend falsch verstanden.

Du nutzt den Variablen-Name deines JFrame-Objektes als Konstrukter, funktioniert nicht. Der Konstrukter muss so wie Klasse heißen.


Beispiel:


```
class MyView {

    public static void main(String[] args) {
         MyView view = new MyView();
         view.init();
    }

    public void init() {
        JFrame myFrame = new JFrame();
        myFrame.setTitle("Mein Fenster"); 
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         ....
         myFrame.setVisible(true);
    }
}
```

So in etwa könntest Du den Aufbau gestalten. Das ist natürlich nur ein Beispiel, welches Du an deinen Code anpassen musst.

Aber wenn ich mir deinen Code so anschaue, erkenne ich einige Fehler.
Zum Beispiel hast Du den Umgang mit der 2D-Arraylist auch nicht richtig verstanden...


----------



## Paul15 (29. Jun 2015)

Was bedeutet das
	
	
	
	





```
MyView view = new MyView();
         view.init();
```


----------



## tffasse (29. Jun 2015)

Paul15 hat gesagt.:


> Was bedeutet das
> 
> 
> 
> ...


Ich glaube, du solltest dir vorher erstmal die Basics in Java anschauen und verstehen, bevor du dich an grafische Oberflächen versuchst.


----------



## Paul15 (29. Jun 2015)

So ich habes geschaft.

```
public class Test {
    public static void main(String[] args) {

     JFrame meinFrame = new JFrame("Beispiel JFrame");       
     meinFrame.setSize(1000, 1000);
     meinFrame.setVisible(true);
     
    JPanel contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    meinFrame.setContentPane(contentPane);
    contentPane.setLayout(null);
     }
}
```

Aber für was ist jetzt 

```
MyView view [COLOR=#339933]=[/COLOR] [COLOR=#000000][B]new[/B][/COLOR] MyView[COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]

         view.[COLOR=#006633]init[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
```


----------



## camelCase90 (29. Jun 2015)

Ich würde Dir, wie tffasse bereits geschrieben hat, dringend raten Dich erstmal mit den Grundlagen zu beschäftigen, denn Zeilen die Du nicht verstehst gehören dazu.


----------



## Paul15 (29. Jun 2015)

Danke für deine Hilfe erstmal

Ich hab mir ein Buch gekauft um mal annfangen Java zu lernen um für die HTL vorbereitet zu sein.

Jetzt hab ich es aber eh geschaft


----------



## camelCase90 (29. Jun 2015)

Learning by doing 

Lese das Buch aufmerksam, damit Du alles verstehst. Teste alles Schritt für Schritt durch, so lernst Du am besten.


----------



## Paul15 (30. Jun 2015)

Ich hab jetzt alles eingebaut doch auf einmal gingen die Variablen nicht mehr. Also hab ich sie in eine eigene Class ausgelagert. So funktioniert es! Aber meine Anzeige kommt nicht mehr höher als 1. Ich habe keine Ahnung warum

Hat wer eine Idee??


----------

