# JFrame aktualisieren/refreshen?



## MädMäx (31. Aug 2010)

Hi,

bei ausführen folgenden Codes werden meine Elemente platteBreite und platteLänge nicht angezeigt, nur durch zufälligen Klick in das Textfield erscheint es zum Teil. Wo liegt mein Fehler?


```
package com.max.berechnung;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
public class View implements ActionListener {
 
	 JLabel label;
	 
	 //Panel für Statusleiste
	 JPanel panel;	
	 
	 JTextField platteLaenge;
	 JTextField platteBreite;

     JFrame applikation;
     Container container;
 
     // Menüleiste
     JMenuBar menueLeiste;
 
     // Menüleiste Elemente
     JMenu datei;
     JMenu hilfe;
 
     // Datei
     JMenuItem oeffnen;
     JMenuItem beenden;
 
     // Hilfe
     JMenuItem faq;
     JMenuItem about;
 
     // Textfeld
     JTextArea textarea;
     
     // Mainframe
     JScrollPane mainframe;
 
     //Button
    JButton button;
    
     public View() {
          applikation = new JFrame("JMenuBar Beispiel");
          container = applikation.getContentPane();
 
          // Menüleiste erzeugen
          menueLeiste = new JMenuBar();
 
          // Menüelemente erzeugen
          datei = new JMenu("Datei");
          hilfe = new JMenu("Hilfe");
 
          // Untermenüelemente erzeugen
          oeffnen = new JMenuItem("öffnen");
          oeffnen.addActionListener(this);
          beenden = new JMenuItem("beenden");
          beenden.addActionListener(this);
          faq = new JMenuItem("F.A.Q.");
          faq.addActionListener(this);
          about = new JMenuItem("Über");
          about.addActionListener(this);
 
          // Menüelemente hinzufügen
          menueLeiste.add(datei);
          menueLeiste.add(hilfe);
 
          // Untermenüelemente hinzufügen
          datei.add(oeffnen);
          datei.add(beenden);
          hilfe.add(faq);
          hilfe.add(about);
 
          // Textfeld erzeugen
          textarea = new JTextArea();
          mainframe = new JScrollPane();

          label = new JLabel();
          label.setText("              Statusleiste");
          label.setForeground(Color.red);
          
          applikation.add(menueLeiste, BorderLayout.NORTH);
          applikation.setSize(1024,764);
          applikation.setVisible(true);
          
          panel = new JPanel();
          panel.setSize(100,20);
          panel.setVisible(true);
          
          platteBreite = new JTextField();
          platteLaenge = new JTextField();
          
          platteBreite.setLocation(40, 40);
          platteBreite.setText("Breite für Platte in cm eingeben");
          platteBreite.setSize(250	,20);
          
          platteLaenge.setLocation(40,80);
          platteLaenge.setText("Länge für Platte in cm eingeben");
          platteLaenge.setSize(250,20);
          
          button = new JButton();
          button.setText("Anzahl der Platten berechnen");
          button.addActionListener(new ButtonListener());
          button.setLocation(100, 60);
          button.setVisible(true);
          
          
          mainframe.add(platteBreite);
          mainframe.add(platteLaenge);
          
          applikation.add(mainframe, BorderLayout.CENTER);
          

          
          panel.add(label);
          applikation.add(panel, BorderLayout.SOUTH);
          applikation.setResizable(false);

          applikation.setVisible(true);

          
     }
 
     public void actionPerformed(ActionEvent object) {
          if (object.getSource() == oeffnen){			
          }
          if (object.getSource() == beenden){
          }
          if (object.getSource() == faq){
          }
          if (object.getSource() == about){
          }
     }
 

}
```

ausgeführt wird das ganze über eine main-methode in einer anderen Class.

Danke und Grüße,
MädMäx


----------



## eRaaaa (31. Aug 2010)

nur kurz überflogen, aber du hast die beiden Textfelder ja nirgends hinzugefügt?!(den Button auch nicht)
EDIT: ach Mensch, ich sollte besser gucken sorry, mainframe.add(platteLaenge); --> Da könnte evtl. How to Use Scroll Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) helfen
Wozu ist der Scrollpane? ;/
Und

```
container = applikation.getContentPane();
```

wofür ist das wenn du es nicht verwendest?
Wofür ist das andere JPanel usw.

Über ein Layout muss man sich evtl. mal vorher einige Gedanken machen...


----------



## hansmueller (1. Sep 2010)

Hallo,

du brauchst nicht bei jeder Komponente die du zum Frame hinzufügst die Methode .setVisible(true) ausführen. Es reicht völlig, wenn du die Komponenten mit .add() hinzufügst.

Erst wenn alles komplett ist, kannst du mit applikation.setVisible(true) das Fenster darstellen lassen.

Die Menüleiste fügt man am besten mit applikation.setJMenuBar(menueLeiste) hinzu.

eRaaaa hat ganz recht. Du solltest dir über das Layout vorher ein paar Gedanken machen. 
Schau dir mal die Tutorials an: Trail: Creating a GUI With JFC/Swing: Table of Contents (The Java™ Tutorials) 

MfG
hansmueller


----------



## MädMäx (1. Sep 2010)

Hi,

danke für Eure Hilfe.

Hab mir jetzt folgendes Layout überlegt:

Komplettes Fenster BorderLayout (Seperator im Center, Teil 1 im North-Teil, Teil 2 im South-Teil). Im South- und North-Teil benütze ich ein GridLayout. 

Folgende Frage: Wenn ich dem JPanel (im Code nachfolgend lowerPart) im South-Teil dynamisch Labels hinzufüge, wie kann ich dieses ansprechen? 


```
lowerPart.add(new JLabel("Label 1"));
lowerPart.getComponent(0);
// Befehl für ansprechen des "Label 1", das in Zeile 0, Spalte 0 des GridLayouts eingefügt wird?
```

Danke und Grüße,
MädMäx


----------



## L-ectron-X (2. Sep 2010)

Hast du es ausprobiert, funktioniert das? Oder brauchst du noch Hilfe?


----------

