ActionListener Abhängigkeitenproblem

vanBraQ

Mitglied
Hi Leute,
habe mal wieder ein wohl etwas größeres Problem :/

Folgendes:
Habe eine MainFrame Klasse, in der das Frame gebuildet wird. Weiters habe ich eine ChangeMainFramePanel Klasse, in der ich auf das MainFrame die jeweilig richtigen Komponenten anzeige.
Dazu habe ich 4 verschiedene Panel Klassen: Header, Default, Kalender, Timetable.
In der Header Klasse werden die Toolbar usw auf das Frame getan, unteranderem gibt es dort 2 Buttons, die mir das umschalten auf die 2 Panels Kalender und Timetable ermöglichen sollen.
Wo genau muss ich jetzt den ActionListener implementieren ?
In der MainFrame Klasse oder in der HeaderPanel Klasse oder gehört der Code überhaupt ganz wo anders hin ?

Hier noch die Codes:

Java:
import javax.swing.*;

@SuppressWarnings("serial")
public class MainFrame extends JFrame{
	
	public MainFrame(){
		MainFramePanelChange.getParent(this);
		MainFramePanelChange.setDefaultPanel();
	}
	
	public static void main(String[] args) {	
		BuildMainFrameMainParts buildparts = new BuildMainFrameMainParts();
		buildparts.buildLookAndFeel();
		MainFrame frame = new MainFrame();
		buildparts.buildProperties(frame);
		LoginDialog dialog = new LoginDialog(frame);
	}

}

Java:
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class MainFramePanelChange {

	private  static CalendarPanel calendarPanel = new CalendarPanel();
	private  static DefaultPanel defaultPanel = new DefaultPanel();
	private  static TimetablePanel timetablePanel = new TimetablePanel();
	private  static HeaderPanel headerpanel = new HeaderPanel();
	private  static JFrame parent;
	
	public static void getParent(JFrame frame){
		parent = frame;
	}
	
	public static void setCalendarPanel() {
		JPanel defaultheader = new JPanel(new BorderLayout());
		parent.getContentPane().removeAll();
		defaultheader.add(headerpanel, BorderLayout.NORTH);
		defaultheader.add(calendarPanel, BorderLayout.CENTER);
		parent.getContentPane().add(defaultheader);
	}
	
	public static void setDefaultPanel() {
		JPanel defaultheader = new JPanel(new BorderLayout());
		parent.getContentPane().removeAll();
		defaultheader.add(headerpanel, BorderLayout.NORTH);
		defaultheader.add(defaultPanel, BorderLayout.CENTER);
		parent.getContentPane().add(defaultheader);
	}
	
	public static void setTimetablePanel() {
		JPanel defaultheader = new JPanel(new BorderLayout());
		parent.getContentPane().removeAll();
		defaultheader.add(headerpanel, BorderLayout.NORTH);
		defaultheader.add(timetablePanel, BorderLayout.CENTER);
		parent.getContentPane().add(defaultheader);
	}
}

Java:
import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


@SuppressWarnings("serial")
public class HeaderPanel extends JPanel implements ActionListener {
	
	private BuildMainFrameActions action = new BuildMainFrameActions();
	
	private JMenuBar menubar;
	private JToolBar toolbar1;
	private JMenu dateinmenu, hilfemenu;
	private JButton timetableButton, calendarButton;
	final Icon calendaricon = new ImageIcon(MainFrame.class.getResource("/images/calendar_20x20.jpg"));
	
	public HeaderPanel(){
		this.setLayout(new GridLayout(2,1));
		
		menubar = new JMenuBar();
		menubar.setBackground(new Color(0xA5D3DF));
		toolbar1 = new JToolBar();
		toolbar1.setRollover(true);
		toolbar1.setFloatable(false); 
		toolbar1.setBackground(new Color(0xA5D3DF));
		
		timetableButton = new JButton("Stundenplan");
	
		timetableButton.addActionListener(this);
		timetableButton.setIcon(calendaricon);
		timetableButton.setBackground(new Color(0xA5D3DF));
		calendarButton = new JButton("Kalender");
		calendarButton.addActionListener(this);
		calendarButton.setIcon(calendaricon);
		calendarButton.setBackground(new Color(0xA5D3DF));
		dateinmenu = new JMenu("Datei");
		hilfemenu = new JMenu("Hilfe");
		
		dateinmenu.add(action.openAction()); //OpenAction aus BuildMainFrameActions wird geadded
		dateinmenu.addSeparator();
		dateinmenu.add(action.exitAction()); //ExitAction aus BuildMainFrameActions wird geadded
		
		menubar.add(dateinmenu);
		menubar.add(hilfemenu);
		toolbar1.add(calendarButton);
		toolbar1.addSeparator();
		toolbar1.add(timetableButton);
		toolbar1.addSeparator();
		toolbar1.setBorder(BorderFactory.createRaisedBevelBorder());
		
		this.add(menubar);
		this.add(toolbar1);
		this.setVisible(true);
	}


        //Hier habe ich aus eigener Überlegung mal die Actions gemacht aber bin mir nicht so sicher ob das stimmt ...
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == calendarButton){
			MainFramePanelChange.setCalendarPanel();
		}
		if(e.getSource() == timetableButton){
			MainFramePanelChange.setTimetablePanel();
		}
		
	}

}
 

bERt0r

Top Contributor
Wo genau muss ich jetzt den ActionListener implementieren ?
Das bleibt dir überlassen. Im wesentlichen gibt es 3 empfehlenswerte Möglichkeiten:
Den Actionlistener in eine separate Datei implementieren.
Java:
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
}
}
MyActionListener al=new MyActionListener();
Den Actionlistener als annonyme Klasse implementieren.
Java:
JButton button=new JButton();
ActionListener al=new ActionListener()
{
@Overrides
public void actionPerformed(ActionEvent e)
{
}
};
button.addActionListener(al);
Den Actionlistener als innere Klasse implementieren.
Java:
class MyActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
}
}
//Methode in der du deine GUI zusammenbaust
JButton button=new JButton();
MyActionListener al=new MyActionListener();
button.addActionListener(al);
 
Zuletzt bearbeitet:

vanBraQ

Mitglied
Das bleibt dir überlassen. Im wesentlichen gibt es 3 empfehlenswerte Möglichkeiten:
Den Actionlistener in eine separate Datei implementieren.

Den Actionlistener als annonyme Klasse implementieren.

Den Actionlistener als innere Klasse implementieren.

Diese 3 Möglichkeiten sind wusste ich ja schon das Problem ist nun:

Um das Panel zu verändern rufe ich im ChangeMainFramePanel folgende Methode auf:
Java:
public static void setCalendarPanel() {
		JPanel defaultheader = new JPanel(new BorderLayout());
		parent.getContentPane().removeAll();
		defaultheader.add(headerpanel, BorderLayout.NORTH);
		defaultheader.add(calendarPanel, BorderLayout.CENTER);
		parent.getContentPane().add(defaultheader);
	}
parent ist in diesem Fall das MainFrame welches ich mir mit foglender Methode im ChangeMainFramePanel hole:

Java:
public static void getParent(JFrame frame){
		parent = frame;
	}
und im MainFrame aufrufe:
Java:
MainFramePanelChange.getParent(this);

Den ActionListener habe ich nun im HeaderPanel implementiert:
Java:
public void actionPerformed(ActionEvent e) {
		if(e.getSource() == calendarButton){
			MainFramePanelChange.setCalendarPanel();
		}
		if(e.getSource() == timetableButton){
			MainFramePanelChange.setTimetablePanel();
		}
		
	}

Das Problem derzeit ist, wenn ich auf den Button klicke hängt sich das gesamte Programm auf.
Ich habe schon versucht mittels Debug das Programm durchzugehen aber bin auch auf keinen ersichtlichen Fehler gestoßen.
Wo könnte der Fehler nun liegen ?
 
S

SlaterB

Gast
bei jeder GUI-Änderung musst du validate(); + repaint(); am JFrame aufrufen, damit das Layout neuberechnet wird
(oder dich genauer dazu schlau machen, gibt sicher auch etwas andere Möglichkeiten)

kopiere das aber besser nicht auch noch in drei Methoden hinein,
erstelle lieber eine Methode mit Parameter und rufe diese von den drei Methoden auf,
nur defaultPanel usw. ändert sich als Parameter für die neue 4. Methode,


das Programm hängt sich übrigens nicht auf, aber es ist noch das alte Bild zu sehen,
was keine Funktion mehr hat, Buttons reagieren nicht mehr, weil entfernt, neue noch nicht an ihrem Platz,
ein Screenshot quasi
 
V

vanny

Gast
Ich würde konzeptionell eher zum CardLayout tendieren, das ist für diesen Zweck da.

Gruß Vanny
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
L actionListener für Button AWT, Swing, JavaFX & SWT 97
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
R ActionListener in Actionlistener AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
Blender3D einzelner ActionListener vs anonyme ActionListener AWT, Swing, JavaFX & SWT 10
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
S While Schleife im Actionlistener AWT, Swing, JavaFX & SWT 1
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
Liondary GUI - ActionListener AWT, Swing, JavaFX & SWT 7
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
E ActionListener führt falsche Funktion aus AWT, Swing, JavaFX & SWT 6
Sin137 ActionListener in MVC AWT, Swing, JavaFX & SWT 7
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
Y ActionListener AWT, Swing, JavaFX & SWT 2
K Ereignisbehandlung, ActionListener, ActionEvent AWT, Swing, JavaFX & SWT 3
A Gui für Vokabeltrainer (ActionListener) AWT, Swing, JavaFX & SWT 14
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
T Einfaches Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
K GUI, Button, ActionListener - ein paar Einsteigerprobleme AWT, Swing, JavaFX & SWT 1
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
A Swing ActionListener AWT, Swing, JavaFX & SWT 8
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
P Swing Seltsames ActionListener-Verhalten AWT, Swing, JavaFX & SWT 7
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
C In der Schleife ActionListener aktivieren AWT, Swing, JavaFX & SWT 3
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
P Swing JPanel mit ActionListener mehrfach verwenden AWT, Swing, JavaFX & SWT 8
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
C ActionListener AWT, Swing, JavaFX & SWT 6
Corben ActionListener Error AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
S Swing JButton mit ActionListener innerhalb einer JTable AWT, Swing, JavaFX & SWT 4
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
M AWT Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
S ActionListener "nach oben weitergeben" AWT, Swing, JavaFX & SWT 10
M Anonymer ActionListener AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
M getSource() findet Button nicht - ActionListener AWT, Swing, JavaFX & SWT 4
S Swing mit ActionListener auf Objekte einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 3
G Swing Button ActionListener macht komische Sachen AWT, Swing, JavaFX & SWT 19

Ähnliche Java Themen

Neue Themen


Oben