Moin zusammen!
Seit Jahren schlage ich mich einem für mich ungelösten Problem herum, jetzt bin ich es satt.
Wie teile ich einer zweiten Klasse (Reaktor) mit, dass in der ersten Klasse (Producer) ein Event stattfand? Wenn ich eine neue Instanz der zweiten Klasse erzeugen könnte, wäre die Angelegenheit trivial, das geht aber hier nicht.
Ich habe weiss der Teufel an dem Problem herumgedoktort, Action-Events im Konstruktor übergeben, Listener implementiert usw. Nichts half. Um das Problem unvoreingenommen darzustellen, ist hier gar kein Eventhandling für das Problem angegeben.
Ich habe zur Verdeutlichung ein simples Codebeispiel angehängt. Der Sachverhalt ist der, dass in der Producer-Klasse diverse Voreinstellungen vorgenommen werden. Nach Abschicken dieser Daten soll sich die Darstellung der weiteren GUI's entsprechend ändern.
Das TabPane:
Klasse Producer
Die reagierende Klasse Reaktor
Ich freu mich schon auf die endgültige Lösung
Vielen Dank im Voraus
RAPTORRS
Seit Jahren schlage ich mich einem für mich ungelösten Problem herum, jetzt bin ich es satt.
Wie teile ich einer zweiten Klasse (Reaktor) mit, dass in der ersten Klasse (Producer) ein Event stattfand? Wenn ich eine neue Instanz der zweiten Klasse erzeugen könnte, wäre die Angelegenheit trivial, das geht aber hier nicht.
Ich habe weiss der Teufel an dem Problem herumgedoktort, Action-Events im Konstruktor übergeben, Listener implementiert usw. Nichts half. Um das Problem unvoreingenommen darzustellen, ist hier gar kein Eventhandling für das Problem angegeben.
Ich habe zur Verdeutlichung ein simples Codebeispiel angehängt. Der Sachverhalt ist der, dass in der Producer-Klasse diverse Voreinstellungen vorgenommen werden. Nach Abschicken dieser Daten soll sich die Darstellung der weiteren GUI's entsprechend ändern.
Das TabPane:
Java:
package eventsueberklassen;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class EventsUeberKlassen extends JFrame
{
private JPanel basePanel;
private JTabbedPane tabPane;
private Producer producer;
private Reactor reactor;
public EventsUeberKlassen()
{
initComponents();
}
private void initComponents()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Events über Klassen");
basePanel = new JPanel();
tabPane = new javax.swing.JTabbedPane();
producer = new Producer();
reactor = new Reactor(producer);
tabPane.add("Producer", producer);
tabPane.add("Reactor", reactor);
tabPane.setSelectedIndex(1);
basePanel.add(tabPane);
add(basePanel);
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args)
{
EventsUeberKlassen sf = new EventsUeberKlassen();
sf.setLocationRelativeTo(null);
sf.setVisible(true);
sf.pack();
}
}
Klasse Producer
Java:
package eventsueberklassen;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Producer extends JPanel
{
private JButton btn;
public Producer()
{
initComponents();
}
private void initComponents()
{
setPreferredSize(new java.awt.Dimension(250, 80));
btn = new JButton("Click");
btn.setPreferredSize(new java.awt.Dimension(150, 50));
add(btn);
}
}
Die reagierende Klasse Reaktor
Java:
package eventsueberklassen;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Reactor extends JPanel
{
private JLabel lbl;
private int btnClicked;
public Reactor(Producer producer)
{
initComponents();
lbl.setText("Nothing happened yet");
}
private void initComponents()
{
setPreferredSize(new java.awt.Dimension(250, 80));
lbl = new JLabel();
lbl.setPreferredSize(new java.awt.Dimension(150, 50));
add(lbl);
btnClicked = 0;
}
public void updateLabel()
{
System.out.println("Reactor.UpdateLabel");
lbl.setText("Der Button wurde "+(btnClicked++)+" mal geklickt!");
btnClicked++;
repaint();
}
}
Ich freu mich schon auf die endgültige Lösung
Vielen Dank im Voraus
RAPTORRS