# JAVA-EDITOR: Panel in Frame aufnehmen



## Freezer11 (6. Mai 2014)

hi,

bin gerade drann eine art funktionsplotter in java zu erstellen. hierbei nutze ich den Java-Editor(Java-Editor ? Wikipedia Java-Editor - Download - heise online)

Durch das Betätigen eines Buttons soll ein neuer Frame aufgerufen werden. 
In diesen Frame möchte ich die zeichnung, welche auf einem panel ist, hinzufügen.

Wichtig ist, dass der Frame und das Panel jeweils eine eigene klasse sind.

der java-editor schreibt die Frames quasi selber, d.h es sind schon einige attribute und funktionen vorgefertigt.

würde ich von hand einen frame generieren, wäre das alles kein problem. das würde ja dann ganz einfach mit der "add"-methode funktionieren.
So ungefähr:


```
public class test_kos extends Panel
{
  public static void main (String args[])
  {
    test_kos kos = new test_kos();
    Frame f = new Frame("Koordinatensystem");
    f.setSize(500,500);
    f.add(kos);
    f.setVisible(true); 
    
  }
  
  public void paint (Graphics g)
  {
    g.setColor(Color.BLACK);
    
    g.drawLine(200, 0, 200, 400);            // y-Achse
    g.drawLine(0, 200, 400, 200);          // x-Achse
    
      for (int i = 20; i < 400; i += 20) {
    g.drawLine(i,198,i,202);
    g.drawLine(198,i,202,i);
    } 
    
    g.drawLine(400, 200, 395, 195);
    g.drawLine(400, 200, 395, 205);
    g.drawLine(200, 0, 195, 5);
    g.drawLine(200, 0, 205, 5);
    g.setColor(Color.BLUE);
    g.drawString("Abschreibungswert/Restbetrag", 10, 30);
    g.setColor(Color.RED);
    g.drawString("Zeit in Jahren", 10, 50);   
  }
}
```

erstellt man nun mit diesem editor einen neuen frame wird automatisch folgendes generiert:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class u extends JFrame {
  // Anfang Attribute
  // Ende Attribute
  
  public u(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300; 
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    // Ende Komponenten
    
    setVisible(true);
  } // end of public u
  
  // Anfang Methoden
  // Ende Methoden
  
  public static void main(String[] args) {
    new u("u");
  } // end of main
  
}
```

kann mir jemand sagen wie ich hier nun das panel aufnehme?
Vielen Dank schonmal!


----------



## Joose (6. Mai 2014)

Klassennamen werden großgeschrieben in UpperCamelCase und ohne "_"
test_kos => TestKos

Du hast in beiden Klasse jeweils eine main Methode, brauchst am Ende aber nur 1 davon!
"test_kos" leitet von Panel ab. Hierbei handelt es sich um eine AWT Klasse. In "u" wird ein JFrame verwendet -> Swing Klasse ..... AWT ist veraltet und wird von Swing nur noch fürs Eventhandling verwendet.

Generell: Finger weg von GUI Buildern, viele davon generieren unsauberen, nicht wartbaren Code, außerdem geht dir der Lerneffekt dadurch verloren.


----------



## Freezer11 (6. Mai 2014)

danke schonmal für deine antwort!

klar so ein GUI-Builder ist schlecht aber hättest du einen vorschlag wie ich es doch realisieren könnte? evtl mit einem beispielcode?

MfG


----------



## Joose (7. Mai 2014)

```
public class TestKos extends JPanel
{  
  public void paint (Graphics g)
  {
    g.setColor(Color.BLACK);
    
    g.drawLine(200, 0, 200, 400);            // y-Achse
    g.drawLine(0, 200, 400, 200);          // x-Achse
    
      for (int i = 20; i < 400; i += 20) {
    g.drawLine(i,198,i,202);
    g.drawLine(198,i,202,i);
    } 
    
    g.drawLine(400, 200, 395, 195);
    g.drawLine(400, 200, 395, 205);
    g.drawLine(200, 0, 195, 5);
    g.drawLine(200, 0, 205, 5);
    g.setColor(Color.BLUE);
    g.drawString("Abschreibungswert/Restbetrag", 10, 30);
    g.setColor(Color.RED);
    g.drawString("Zeit in Jahren", 10, 50);   
  }
}
```


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class AppWindow {
    private JFrame frame;

    public AppWindow(String title) { 
        frame = new JFrame(title);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frame.setSize(300, 300);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        frame.setLocation(x, y);
        frame.setResizable(false);
        Container cp = frame.getContentPane();
        cp.setLayout(...) // hier das gewünschte Layout verwenden! Kein NULL Layout
        frame.pack()
        frame.setVisible(true);
    }

    public void addKostenPanel() {
        frame.getContentPane().add(new TestKos());
    }
  
    public static void main(String[] args) {
        AppWindow aw = new AppWindow("Kostendarstellung");
        aw.addKostenPanel();
    } 
}
```


----------

