Unterklasse in Oberklasse

Status
Nicht offen für weitere Antworten.

Waxe

Mitglied
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

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

Waxe

Mitglied
Nee...
es reicht ja, wenn du mir es an einem Beispiel zeigst:
Ich hab die Klasse OBERFLÄCHE und dort ein Frame erzeugt:
Java:
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:
Java:
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ä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ück und erzeugt es gegebenenfalls.
     * @return Ausgabefenster
     */
    static Frame FensterHolen ()
    {
        if (o == null)
        {
            o = new Feld ();
        }
        return o. fenster;
    }
 
     /**
     * Gibt den linken Rand zurück.
     * @return linker Rand
     */
   static int RandLinksGeben()
    {
        return RandLinks;
    }
     
     /**
     * Gibt den oberen Rand zurück.
     * @return oberer Rand
     */
   static int RandObenGeben()
    {
        return RandOben;
    }    

}
 

Schandro

Top Contributor
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

Top Contributor
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 ;-)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben