Swing Vererbungsproblem

TheMuh

Mitglied
Ich habe eine statische Methode die diverse Swing-Elemente in ein GridBagLayout einfügt.

Java:
public static void Add(Component a, int x, int y, int width, int height) {
		Clear(x, y, width, height);
		Add(MasterPane, Gbl, a, x, y, width, height, 1, 1, 1, 10, 0, 0, 0, 0, 0, 0);
	}

Funktioniert auch wunderbar, insbesondere habe ich für die Swing Elemente eigene Klassen geschrieben die z.b. von JText erben, Objekte erzeugen und diese Objekte werden dann an die "Add Methode" übergeben und über die Component a Variable auch richtig erkannt.

Mein Problem ist jetzt, ich würde gerne meinen selbstgeschriebenen Klassen alle Variablen zuweisen (x,y, etc..) so dass jedes Objekt das erzeugt wird, von einer meiner selbstgeschriebenen Klasse automatisch diese Variablen zugewiesen bekommt.

Das Problem ist nun das wenn ich eine solche Klasse habe, kann ich zwar diese an die "Add" Methode übergeben, ich aber nicht auf die zusätzlichen Variablen zugreifen, da "Component" ja als Superklasse diese Variablen nicht kennt und den Zugriff auf die selbstgeschriebenen Klassenvariablen aus "Unwissenheit" verweigert.
Ich benötige aber "Component" damit ich verschiedene Swingelemente übergeben kann.

Was kann ich tun, damit die "Add" Methode auf die Variablen aller übergebenen Objekte direkt zugreifen kann ?
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Mein Problem ist jetzt, ich würde gerne meinen selbstgeschriebenen Klassen alle Variablen zuweisen (x,y, etc..) so dass jedes Objekt das erzeugt wird, von einer meiner selbstgeschriebenen Klasse automatisch diese Variablen zugewiesen bekommt.
geht es denn um mehr als x, y, breite und höhe? Denn diese Attribute besitzt Component bereits und diese können auch gesetzt und ausgelesen werden.
 
S

SlaterB

Gast
wie sind die Attribute ansonsten in verschiedenen Swing-Klassen eingebaut, kopierter Code?
grundsätzlich ist denkbar dass alle betroffenen Klassen ein bestimmtes Interface implementieren,
aber ganz sauber mit Component wird das nicht, da muss einmal blind gecastet werden,

besser ist das was GridBagConstraints selber auszeichnet: ein separates Objekt mit vielen Attributen,
kann ja gerne in verschiedenen eigenen Swing-Klassen festes Attribut sein, muss auch nicht genau GridBagConstraints sein,
sondern ein eigenes PositionData oder so
 

TheMuh

Mitglied
@Michael
Es wäre mir schon recht, wenn ich verstehen würde wie ich selbstgebastelte abgeleitete Klassen an eine gemeinsame Superklasse so weitergeben kann, dass ich auf selbstgeschriebene Variablen direkt von der Superklasse aus zugreifen kann, insfoern reicht die x,y Eigenschaft von Component nicht wirklich aus.
Es kann auch gut sein, das ich später weitere Variablen benötigen werde und es dann einfach praktischer wäre, direkt auf die Objekteigenschaften zugreifen zu können, als diese immer mühsam einzeln weiterzugeben ...

@SlaterB
Aufgerufen wird beispielweise folgendes:
Java:
PanelOuter a = new PanelOuter(6, 7, 5, 5);

Die zugehörige Klasse lautet:
Java:
public class PanelOuter extends JPanel {
	public GridBagLayout gbl = new GridBagLayout();
	private static final long serialVersionUID = 1L;
	static int links = 10;
	static int rechts = 10;
	static int oben = 10;
	static int unten = 10;
	
	public PanelOuter (int a, int b, int c, int d) {
		....
		Grid.Add(this, a, b, c, d);
	}
}

und das dann folgende der GridKlasse lautet:
Java:
// Komponente hinzufügen (MasterPane)
	public static void Add(Component a, int x, int y, int width, int height) {
		Clear(x, y, width, height);
		Add(MasterPane, Gbl, a, x, y, width, height, 1, 1, 1, 10, 0, 0, 0, 0, 0, 0);
	}

welches dann zuletzt auf folgendes zugreift:
Java:
// HAUPTROUTINE "Hinzufügen"
	public static void Add(Container a, GridBagLayout b, Component c, int x, int y, int width, int height, double weightx, double weighty,
						   int fill, int anchor, int top, int bottom, int left, int right, int ipadx, int ipady) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x-1;
		gbc.gridy = y-1;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		gbc.fill = fill;
		gbc.anchor = anchor;
		gbc.insets = new Insets(top, bottom, left, right);
		gbc.ipadx = ipadx;
		gbc.ipady = ipady;
		b.setConstraints(c, gbc);
		a.add(c);
	}

Erst Mal vielen Dank für deine bisherige Mühe SlaterB! Ich weiß dein Engagement wirklich zu schätzen ;)
 
Zuletzt bearbeitet:

TheMuh

Mitglied
du meinst ich könnte für beispielsweise PanelOuter direkt bei der Objekterstellung von dem Panel a ein eigenes Objekt abgeleitet von GridBagConstraints innerhalb der Klasse PanelOuter erzeugen, das dann an die Methode"Add" der GridKlasse weitergegeben wird und alle Merkmale die ich will besitzt ?

also ich denke das könnte ich hinkriegen ... sofern ich dies richtig verstanden habe und dies die einfachste Lösung ist ...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
statische Variablen sind bei evt. mehreren PanelOuter-Objekten gefährlich, oder sind das Konstanten?
links, rechts usw. werden auch nirgendwo benutzt, insofern deren Sinn nicht ganz ersichtlich

----

> direkt bei der Objekterstellung von dem Panel a ein eigenes Objekt abgeleitet von GridBagConstraints innerhalb der Klasse PanelOuter erzeugen

eine Möglichkeit, gibt bestimmt viele, was genau du überhaupt brauchst ist mir nicht klar
 

TheMuh

Mitglied
> statische Variablen sind bei evt. mehreren PanelOuter-Objekten gefährlich, oder sind das Konstanten?
links, rechts usw. werden auch nirgendwo benutzt, insofern deren Sinn nicht ganz ersichtlich

Richtig .. das sind Konstanten die für alle PanelOuter Objekte gelten und für einen Border benötigt werden, der für alle Objekte gleich sein soll...

>eine Möglichkeit, gibt bestimmt viele, ...

ich werd das mal probieren ...
 

Neue Themen


Oben