Moin Zusammen!
Als erstes: Ja, ich habe so ziemlich alles gelesen, was man so lesen kann zum Thema Event Handling,
habe auch 2 Wochen erfolglos probiert. Aber ich verstehe einfach nicht, wie so ein Event-Handling funktioniert.
Bitte helft mir auf die Sprünge!!
Zur Aufgabenstellung:
Ich habe einen StartFrame, der irgendwelche Panels darstellen soll.
Die Panels stammen alle von einem BasePanel ab. Auf dem BasePanel liegt ein ButtonPanel.
Je nachdem, welches Panel nun gerade aktiv ist, sollen mit Hilfe der Buttons natürlich unterschiedliche Funktionen generiert werden.
Es passiert aber rein gar nichts und ich weiss beim besten Willen nicht, warum nichts passiert.
Vielleicht ist jemand von Euch so nett und schaut sich meinen vereinfachten Code mal an.
Zuerst der StartFrame:
Dieses "public static final StartFrame MAIN" stammt noch aus meinen eigenen Versuchen. Damit konnte ich ansatzweise zumindest die Panels darstellen. (Ähnlich dem Problem ein paar Threads weiter unten.) Wenn es jedoch darum geht, auf Panel 1 oder 2 etwas anderes zu machen, als nur ein neues Panel darzustellen,
versagt diese Vorgehensweise völlig.
Das ButtonPanel:
Das BasePanel:
Panel1 abgeleitet von BasePanel:
Panel2 abgeleitet von BasePanel:
Vielleicht ist ja auch die Art und Weise, wie ich die Events behandle, völlig falsch. Ich kanns halt einfach nicht beurteilen.
Danke für Eure Hilfe!
Als erstes: Ja, ich habe so ziemlich alles gelesen, was man so lesen kann zum Thema Event Handling,
habe auch 2 Wochen erfolglos probiert. Aber ich verstehe einfach nicht, wie so ein Event-Handling funktioniert.
Bitte helft mir auf die Sprünge!!
Zur Aufgabenstellung:
Ich habe einen StartFrame, der irgendwelche Panels darstellen soll.
Die Panels stammen alle von einem BasePanel ab. Auf dem BasePanel liegt ein ButtonPanel.
Je nachdem, welches Panel nun gerade aktiv ist, sollen mit Hilfe der Buttons natürlich unterschiedliche Funktionen generiert werden.
Es passiert aber rein gar nichts und ich weiss beim besten Willen nicht, warum nichts passiert.
Vielleicht ist jemand von Euch so nett und schaut sich meinen vereinfachten Code mal an.
Zuerst der StartFrame:
Code:
package rrs;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class StartFrame extends javax.swing.JFrame
{
public static final StartFrame MAIN = new StartFrame();
private int status;
//
private ButtonPanel buttonPanel;
private javax.swing.JPanel panel;
private String text1;
private String text2;
private StartFrame()
{
initComponents();
}
public void initComponents()
{
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize (1000,700);
panel = new BasePanel();
add (panel);
showRightPanel(0);
}
public javax.swing.JPanel showRightPanel(int status)
{
if (status == 0)
{
remove(panel);
panel = new BasePanel();
panel.setBounds (10,15, getWidth()-30, getHeight()-650);
add (panel);
validate ();
repaint();
setVisible (true);
}
else if (status==1)
{
remove(panel);
panel = new Panel1();
panel.setBounds (10,15, getWidth()-30, getHeight()-650);
add (panel);
validate ();
repaint();
setVisible (true);
}
else if (status==2)
{
remove(panel);
panel = new Panel2();
panel.setBounds (10,15, getWidth()-30, getHeight()-650);
add (panel);
validate ();
repaint();
setVisible (true);
}
return panel;
}
public static void main(String[] args)
{
StartFrame main = StartFrame.MAIN;
main.setVisible (true);
}
}
Dieses "public static final StartFrame MAIN" stammt noch aus meinen eigenen Versuchen. Damit konnte ich ansatzweise zumindest die Panels darstellen. (Ähnlich dem Problem ein paar Threads weiter unten.) Wenn es jedoch darum geht, auf Panel 1 oder 2 etwas anderes zu machen, als nur ein neues Panel darzustellen,
versagt diese Vorgehensweise völlig.
Das ButtonPanel:
Code:
package rrs;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.EventListenerList;
public class ButtonPanel extends javax.swing.JPanel
{
public ButtonPanel(String text1, String text2)
{ listeners = new EventListenerList();
this.text1 = text1;
this.text2 = text2;
setSize(1050, 100);
initComponents();
}
private void initComponents()
{
btn1 = new javax.swing.JButton();
btn2 = new javax.swing.JButton();
setLayout(new java.awt.GridLayout(1, 0));
btn1.setText(text1);
btn1.setPreferredSize(new java.awt.Dimension(150, 80));
btn1.setActionCommand(text1);
btn1.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
btn1ActionPerformed(evt);
}
});
add(btn1);
btn2.setText(text2);
btn2.setActionCommand(text2);
btn2.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
btn2ActionPerformed(evt);
}
});
add(btn2);
}
private void btn1ActionPerformed(java.awt.event.ActionEvent evt)
{
fireActionEvent(evt);
}
private void btn2ActionPerformed(java.awt.event.ActionEvent evt)
{
fireActionEvent(evt);
}
private void fireActionEvent(ActionEvent evt)
{
ActionListener[] listenerList = listeners.getListeners(ActionListener.class);
for (int i = listenerList.length-1; i>=0; --i)
{
listenerList[i].actionPerformed(evt);
}
}
public void addActionListener(ActionListener listener)
{
listeners.add(ActionListener.class, listener);
}
public void removeActionListener(ActionListener listener)
{
if (listeners != null) {
listeners.remove(ActionListener.class, listener);
}
}
ActionListener listener;
EventListenerList listeners;
private javax.swing.JButton btn2;
private javax.swing.JButton btn1;
private String text1;
private String text2;
}
Das BasePanel:
Code:
package rrs;
import javax.swing.event.EventListenerList;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
public class BasePanel extends javax.swing.JPanel implements ActionListener
{
private String text1;
private String text2;
private ButtonPanel bp;
public BasePanel()
{
setPreferredSize(new java.awt.Dimension(950, 500));
setBackground(new java.awt.Color(236, 250, 220));
setBorder(javax.swing.BorderFactory.createTitledBorder("Base-Panel"));
setLayout(new java.awt.BorderLayout());
text1 = "Show Panel 1";
text2 = "Show Panel 2";
makePanel(text1, text2);
}
public void makePanel(String text1, String text2)
{
ButtonPanel bp = new ButtonPanel(getText1(), getText2());
setBackground(new java.awt.Color(236, 250, 220));
bp.setSize (1050, 100);
setLayout(new java.awt.BorderLayout());
add(bp, java.awt.BorderLayout.SOUTH);
}
public String getText1 ()
{
return text1;
}
public String getText2 ()
{
return text2;
}
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
System.out.println("ActionEvent: " + actionCommand);
if (actionCommand.equalsIgnoreCase(getText1()) {
btn1Action();
} else if (actionCommand.equalsIgnoreCase(getText2())) {
btn2Action();
}
}
public void btn1Action()
{
StartFrame.MAIN.showRightPanel(1);
}
public void btn2Action()
{
StartFrame.MAIN.showRightPanel(2);
}
}
Panel1 abgeleitet von BasePanel:
Code:
package rrs;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Panel1 extends BasePanel implements ActionListener
{
public Panel1()
{
setBorder(javax.swing.BorderFactory.createTitledBorder("Panel 1"));
this.makePanel ("PANEL1 BTN1", "PANEL1 BTN2");
}
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if (actionCommand.equalsIgnoreCase(getText1())) {
System.out.println("Hier kommt jetzt die Panel1 BTN1-Action");
} else if (actionCommand.equalsIgnoreCase(getText2())) {
System.out.println("Hier kommt jetzt die Panel1 BTN2-Action");
}
else
{
System.out.println("Hier triff gar nichts zu");
}
}
public void btn1Action()
{
System.out.println ("Button 1 in Panel 1 wurde geklickt");
}
public void btn2Action()
{
System.out.println ("Button 2 in Panel 1 wurde geklickt");
}
}
Panel2 abgeleitet von BasePanel:
Code:
package rrs;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Panel2 extends BasePanel implements ActionListener
{
public Panel2 ()
{
setBorder(javax.swing.BorderFactory.createTitledBorder("Panel 2"));
this.makePanel ("PANEL2 BTN1", "PANEL2 BTN2");
}
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if (actionCommand.equalsIgnoreCase(getText1())) {
System.out.println("Hier kommt jetzt die PANEL2 BTN1-Action");
} else if (actionCommand.equalsIgnoreCase(getText2())) {
System.out.println("Hier kommt jetzt die PANEL2 BTN2-Action");
}
}
public void btn1Action()
{
System.out.println ("Button 1 in Panel 2 wurde geklickt");
}
public void btn2Action()
{
System.out.println ("Button 2 in Panel 2 wurde geklickt");
}
}
Vielleicht ist ja auch die Art und Weise, wie ich die Events behandle, völlig falsch. Ich kanns halt einfach nicht beurteilen.
Danke für Eure Hilfe!