# Unterklasse in Oberklasse



## Waxe (18. Jun 2009)

Wie kann man denn mal ganz generell eine andere Klasse so in die Oberklasse einfügen, dass sie beiispielsweise auf ein Frame eingebaut werden kann.
mit f.add("Unterklasse"); funktionierts nicht...


----------



## Schandro (18. Jun 2009)

Wenn du eine Instanz einer eigenen Klasse auf ein Frame adden willst, muss die Klasse direkt oder indirekt von "Component" erben.


----------



## Waxe (18. Jun 2009)

Und was bédeutet das konkret??
Oder wie sieht des in Java aus??


----------



## Schandro (18. Jun 2009)

Das du ne eigene Klasse machst die z.b. von JComponent erbt. Wenn du nicht weist wie das geht: Les dir ein paar Kapitel über OOP in einem X-beliebigen Java Buch durch. Die Autoren solcher Bücher können das vermutlich besser erklären als ich.
z.b.:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3 Klassen und Objekte


----------



## Waxe (18. Jun 2009)

Nee...
es reicht ja, wenn du mir es an einem Beispiel zeigst: 
Ich hab die Klasse OBERFLÄCHE und dort ein Frame erzeugt:

```
class OBERFLÄCHE
{
    Frame f;
    Label l;
    Button button;

    OBERFLÄCHE(){
        
       
        
        f = new Frame ("Blabla");// erzeugt Fenster
        f.setSize(600, 400);
        f.setLocation(0,30);
        f.setBackground(new Color(123, 253, 86));
        f.setVisible(true);
        f.setLayout(null);
```
und will jetzt eine diese Klasse einfügen: 
	
	
	
	





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

/**
 * Erzeugt die Bedienelemente und verwaltet das Ausgabefenster.
 * 

class Feld
{


    private static Feld o = null;
    private Frame fenster = null;
    private static int RandLinks;
    private static int RandOben;
    private Insets raender;

    /**
     * Baut die Bedienoberfl&auml;che auf
     */
    private Feld ()
    {
        int hoehe, breite;
        hoehe = 300;
        breite = 300;
        fenster = new Frame ("TicTacToe");
        fenster. setResizable (false);
        fenster. setVisible (true);
        fenster. setLayout (null);
        fenster. setBackground (Color.white);
        fenster. setSize (breite, hoehe);
        raender = new Insets(0,0,0,0);
        raender = fenster.getInsets();
        RandLinks = raender.left;
        RandOben=raender.top;
        fenster. setSize (breite+RandLinks, hoehe+RandOben);
    }
   
    
    /**
     * Gibt das Ausgabefenster zur&uuml;ck und erzeugt es gegebenenfalls.
     * @return Ausgabefenster
     */
    static Frame FensterHolen ()
    {
        if (o == null)
        {
            o = new Feld ();
        }
        return o. fenster;
    }
 
     /**
     * Gibt den linken Rand zur&uuml;ck.
     * @return linker Rand
     */
   static int RandLinksGeben()
    {
        return RandLinks;
    }
     
     /**
     * Gibt den oberen Rand zur&uuml;ck.
     * @return oberer Rand
     */
   static int RandObenGeben()
    {
        return RandOben;
    }    

}
```


----------



## Schandro (18. Jun 2009)

Du öffnest im Konstruktor der Klasse OBERFLÄCHE ein neues Fenster. Wie willst du das bitte in ein bereits bestehendes einfügen? 
==> was soll der Code machen wenn er fertig ist?



> Nee...
> es reicht ja, wenn du mir es an einem Beispiel zeigst:


Sachen wie OOP KANN man nicht nur anhand von Beispielen lernen, und das wird dir jeder andere Programmierer bestätigen. Aber egal, dass kannst du ja auch später nachhohlen.


----------



## icarus2 (18. Jun 2009)

Also ich bin jetzt nicht sicher ob ich deine Frage richtig verstanden habe.... aber soweit ich das verstanden habe willst du in einen "Frame" einen "Haupt-Frame" einfügen. Dazu kann man für den inneren "Frame" z.B. einen JPanel verwenden.

Hier ein kuzer Beispiel-Code:

[Java]
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;


public class Surface extends JFrame{

	Container c;
	InnerSurface is;
	JPanel testPanel;
	JButton testButton;

	public Surface(){

		c = getContentPane();
		c.setLayout(new BorderLayout());

		testPanel = new JPanel();
		testPanel.setBorder(new EtchedBorder());
		testButton = new JButton("Test");
		testPanel.add(testButton);

		is = new InnerSurface();

		c.add(is, BorderLayout.CENTER);
		c.add(testPanel, BorderLayout.EAST);

	}


	public static void main(String[] args) {
		Surface frame = new Surface();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

}

class InnerSurface extends JPanel{

	protected void paintComponent(Graphics g){
		super.paintComponent(g);

		g.drawOval(50, 50, 50, 50);
	}

}
[/Java]

Ist halt einfach Swing und nicht AWT. Aber ich würde dir eh anraten Swing zu verwenden.


Wie gesagt, ich bin mir jetzt nicht sicher ob es das ist, was du möchtest, ich sehs ja dann ;-)


----------

