Button : addActionListner to BorderLayout.CENTER

anyname

Grünschnabel
hallo

ich möchte ein Jframe mit BorderLayout versehen. der "BorderLayout.NORTH" hat ein Button BT1,, wenn man auf diesem Button BT1 kilckt, kommt dessen Inhalt in BorderLayout.CENTER. wie schafft man das mit Actionlistener?

Inhalt des Buttons = z.B. ein JLabel (soll im BorderLayout.CENTER angezeigt werden, wenn man auf BT1 klickt)

danke
 
Zuletzt bearbeitet:
Hi

du meinst, einen bestimmten Text setzen?
Ganz normal mit der JLabel-Variable über setText, egal wo sich das Label im Layout befindet.
 
Hier ein kleines Beispiel:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * Die Klasse MainGui erbt von der Klasse JFrame somit können alle Eigenschaften
 * des JFrame direkt verwendet werden ich empfehle allerdings dir anzugewöhnen
 * immer mit this die Klassen eigenen Eigenschaften anzusprechen. Zudem
 * implementiert die Klasse das Interface ActionListener somit wird die
 * actionPerformed Methode vorgeschrieben und die klasse kann wie ein
 * ActionListener an JButtons oder an was auch immer vergeben werden.
 * 
 * @author youza
 * 
 */
public class MainGui extends JFrame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8111424483338861563L;
	private JButton jbWhatEver = new JButton();

	private JPanel jpCenter = new JPanel();
	private JLabel jlWhatEver = new JLabel();
	private JLabel jlWhatEverOld = new JLabel();

	/**
	 * Einhängepunkt der Applikation sollte eigentlich nicht in der Gui Klasse sein
	 * 
	 * @param args Standard Variable in welcher Systemvariablen übergeben werden (z.B. auf Konsole)
	 */
	public static void main(String[]args){
		new MainGui();
	}
	/**
	 * Konstruktor um die initialen Werte zu vergeben
	 */
	public MainGui() {
		/*
		 * Hier wird das Layout auf das BorderLayout festgelegt und die beiden
		 * GuiElemente hinzugefügt
		 */
		this.setLayout(new BorderLayout());

		jlWhatEverOld.setText("Alter Text");

		jpCenter.add(jlWhatEverOld);

		this.add(jbWhatEver, BorderLayout.NORTH);
		this.add(jpCenter, BorderLayout.CENTER);

		// initiale Werte für den Text der Gui Elemente
		jbWhatEver.setText("Setze Neuen Text");
		jlWhatEver.setText("Neuer Text");

		// jbWhatEver.add(jlWhatEver);

		/*
		 * Der ActionCommand dient dazu, dass bei einer Klasse mit mehreren
		 * Buttons die einzelnen Aktionen unterschieden werden können.
		 */
		jbWhatEver.setActionCommand("jlWhatEver");

		// Der ActionListener muss dem Button noch zugewiesen werden
		jbWhatEver.addActionListener(this);

		// JFrame in Bildschirmmitte versetzen
		this.setLocationRelativeTo(null);

		// Die Größe des JFrames anpassen
		this.pack();

		// JFrame sichtbar machen
		this.setVisible(true);

	}

	/**
	 * Hier wird festgelegt wie auf das abfeueren eines Elements reagiert werden
	 * soll
	 */
	@Override
	public void actionPerformed(ActionEvent event) {
		if (event.getActionCommand().equals("jlWhatEver")) {

			jpCenter.removeAll();
			jpCenter.add(jlWhatEver);
			jbWhatEver.setActionCommand("jlWhatEverOld");
			jbWhatEver.setText("Setze alten Text");
			this.repaint();
		} else if (event.getActionCommand().equals("jlWhatEverOld")) {

			jpCenter.removeAll();
			jpCenter.add(jlWhatEverOld);
			jbWhatEver.setActionCommand("jlWhatEver");
			jbWhatEver.setText("Setze Neuen Text");
			this.repaint();
		}

	}
}

Obwohl ich nicht genau weiß was du mit Inhalt des JButton meinst aber im Prinzip kannst du im ActionListener alles aus dem Button rausholen solange es eine memberVariable ist.

Viele Grüße
Youza
 
Zurück