Guten Mittag zusammen 
Ich habe ein "verständnis-problem". ich habe ein buch, da wird behauptet, dass bei der parameterübergabe von nicht-einfachen Datentypen nur ein "Pointer" auf die Datenstruktur übergeben wird. Das man dann also tatsächlich Änderungen an der jeweiligen Struktur vornimmt.
Bsp.:
-------
MyComplexClass instance = new ...;
instance.x = 4;
instance.y = 6;
AddComponents(instance);
System.out.print("x: " + x +);
------
public void AddComponents(MyComplexClass in) {
in.x = in.x + in.y;
}
-------
Ausgabe: 10
Das gilt aber wohl nur für nicht-einfache Datentypen.
Jetzt habe ich eine Klasse, in der ich eine Instanz einer anderen Klasse (JComponent) speichern möchte und auf diese auch später zugreifen. Ist das irgendwie möglich? Also bei mir bekomm ich immer einen "NullPointer", obwohl die Instance auf jeden Fall existiert!
Das ist meine Schleife in der main-Funktion. in elements[] stehen alle elemente, die irgendwie erzeugt werden sollen, wobei die zugehörige klasse wie folgt aussieht:
Nur ich kann so nicht mehr auf component zugreifen (Funktion GetValue()). Kann mir vllt. jemand nochmal erklären, wie die Parameterübergabe bei Java diesbezüglich wirkl. funktioniert?
LG, Hannes
Ich habe ein "verständnis-problem". ich habe ein buch, da wird behauptet, dass bei der parameterübergabe von nicht-einfachen Datentypen nur ein "Pointer" auf die Datenstruktur übergeben wird. Das man dann also tatsächlich Änderungen an der jeweiligen Struktur vornimmt.
Bsp.:
-------
MyComplexClass instance = new ...;
instance.x = 4;
instance.y = 6;
AddComponents(instance);
System.out.print("x: " + x +);
------
public void AddComponents(MyComplexClass in) {
in.x = in.x + in.y;
}
-------
Ausgabe: 10
Das gilt aber wohl nur für nicht-einfache Datentypen.
Jetzt habe ich eine Klasse, in der ich eine Instanz einer anderen Klasse (JComponent) speichern möchte und auf diese auch später zugreifen. Ist das irgendwie möglich? Also bei mir bekomm ich immer einen "NullPointer", obwohl die Instance auf jeden Fall existiert!
Code:
// Komponenten hinzufügen
JComponent component = new JPanel(); // Standardinitialisierung
getContentPane().setLayout(null); // Da Element absolut positioniert werden
for (int i = 0; i < ComponentsCount; i++) {
// Elementtyp erzeugen
switch (elements[i].GetType()) {
case 0: // Button
component = new JButton(elements[i].GetTitle());
elements[i].SetElement(component);
break;
case 2: // Checkbox
component = new JCheckBox(elements[i].
GetTitle());
elements[i].SetElement(component);
break;
}
// Größe und Position des Elements übernehmen
component.setBounds(elements[i].GetBoundingRect());
// Element der ContentPane hinzufügen
getContentPane().add(component);
}
Das ist meine Schleife in der main-Funktion. in elements[] stehen alle elemente, die irgendwie erzeugt werden sollen, wobei die zugehörige klasse wie folgt aussieht:
Code:
public class Element {
// ---------------------------------------------------------------------
// Felder
// ---------------------------------------------------------------------
// Felder, die mit Infos aus der Datei gefüllt werden
private byte id;
private byte type;
private short xChoord;
private short yChoord;
private short width;
private short height;
private byte[] rgbColor = new byte[3];
private byte show;
private byte active;
private String title;
private JComponent component;
public FunctionCall[] aAction = new FunctionCall[23];
// ---------------------------------------------------------------------
// Konstruktoren
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
public Element(CppDataInputStream file) {
// hier wird alles geladen und so... ist unwichtig für das problem
}
// *********************************************************************
// ---------------------------------------------------------------------
// Returns/Sets
// ---------------------------------------------------------------------
public short GetType() {return type;}
public String GetTitle() { return title;}
public Rectangle GetBoundingRect() {return new Rectangle(xChoord, yChoord, width, height);}
public void SetElement(JComponent c) {component = c;}
// ---------------------------------------------------------------------
// Funktionen
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
public String GetValue () {
switch (type) {
case 0: // Button
return ((JButton) component).getText();
}
return null;
}
// *********************************************************************
}
Nur ich kann so nicht mehr auf component zugreifen (Funktion GetValue()). Kann mir vllt. jemand nochmal erklären, wie die Parameterübergabe bei Java diesbezüglich wirkl. funktioniert?
LG, Hannes