Hi,
Ich vermute zwar, dass die Erklärung zu den absoluten Basics gehört, aber ich komme einfach nicht drauf. Also wir haben 2 Klassen, die erste ist die „Main“ Klasse in der, im Konstruktor, die GUI erstellt wird. Jetzt möchte ich in der 2. Klasse eine Methode der ersten Klasse aufrufen. Ich gehe in dem Fall immer wie folgt vor:
FirstClass variablenName = new FirstClass();
variablenName.methodenName();
Jetzt wird jedoch der Konstruktor erneut aufgerufen und die GUI ein zweites mal erzeugt. Initialisiere ich die Variable jedoch nicht oder mit „null“ lässt sich, logischer Weise, die Methode nicht ausführen.
Hier ein kleines Beispiel (KSKB), welches mein Problem verdeutlicht:
Nun zu meiner Frage, ist das ein Design Problem oder gibt es eine andere Möglichkeit ein Objekt zu initialisieren? Bzw. vielleicht sogar die Möglichkeit auf die „Ur-Instanz“ zu referenzieren?
Danke
Zenic
Ich vermute zwar, dass die Erklärung zu den absoluten Basics gehört, aber ich komme einfach nicht drauf. Also wir haben 2 Klassen, die erste ist die „Main“ Klasse in der, im Konstruktor, die GUI erstellt wird. Jetzt möchte ich in der 2. Klasse eine Methode der ersten Klasse aufrufen. Ich gehe in dem Fall immer wie folgt vor:
FirstClass variablenName = new FirstClass();
variablenName.methodenName();
Jetzt wird jedoch der Konstruktor erneut aufgerufen und die GUI ein zweites mal erzeugt. Initialisiere ich die Variable jedoch nicht oder mit „null“ lässt sich, logischer Weise, die Methode nicht ausführen.
Hier ein kleines Beispiel (KSKB), welches mein Problem verdeutlicht:
Java:
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class MainClass extends JPanel{
CardLayout layout;
public static void main(String[] args){
new MainClass();
}
public MainClass(){
JFrame startFrame = new JFrame();
startFrame.setLayout(new FlowLayout());
layout = new CardLayout();
this.setLayout(layout);
this.setPreferredSize(new Dimension(300,300));
this.add(createPanel(300,300,Color.red),"redPanel");
this.add(createPanel(300,300,Color.blue),"bluePanel");
TestClass tc = new TestClass();
startFrame.add(this);
startFrame.add(tc);
startFrame.pack();
startFrame.setVisible(true);
}
public void changePanel(){
layout.next(this);
}
private JPanel createPanel(int x, int y, Color c){
JPanel cachePanel = new JPanel();
cachePanel.setPreferredSize(new Dimension(x,y));
cachePanel.setBackground(c);
return cachePanel;
}
}
Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class TestClass extends JPanel implements ActionListener{
JButton button;
public TestClass(){
this.setPreferredSize(new Dimension(100,300));
button = new JButton("Next");
button.addActionListener(this);
this.add(button);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(button)){
MainClass cLT = new MainClass();
cLT.changePanel();
}
}
}
Nun zu meiner Frage, ist das ein Design Problem oder gibt es eine andere Möglichkeit ein Objekt zu initialisieren? Bzw. vielleicht sogar die Möglichkeit auf die „Ur-Instanz“ zu referenzieren?
Danke
Zenic