Stefan: Inhalt eines JFrames ändern

Hallo,

in meinem Java Programm, Benutzeroberfläche mit Swing, habe ich oben eine Menüleiste. Wenn ich im Menü oben etwas anklicke soll der Inhalt des ContentPanes geändert werden... Für jeden Menüpunkt habe ich mit einen JPanel Container erstellt und wollte dann je nachdem welcher Menüpunkt geklickt wird diesen an die setContentPane() Methode des JFrames übergeben. Allerdings klappt das nicht! Was mache ich falsch?

Danke für jede Hilfe

Stefan

Hier noch mein Code:

import javax.swing.*;
import java.awt.event.*;

public class FrameMain extends JFrame implements ActionListener
{
 private JPanel Panel1 = new JPanel(null);
 private JPanel Panel2 = new JPanel(null);

private JButton Button1 = new JButton("Button1");
 private JButton Button2 = new JButton("Button2");
 private JButton Button3 = new JButton("Button3");
 private JButton Button4 = new JButton("Button4");

public FrameMain()
 {
  JPanel Panel1 = new JPanel(null);
  JPanel Panel2 = new JPanel(null);

Button1.setBounds(5,5,130,25);
        Button2.setBounds(140,5,130,25);
        Button3.setBounds(5,5,130,25);
        Button4.setBounds(140,5,130,25);

Panel1.add(Button1);
        Panel1.add(Button2);
        Panel2.add(Button3);
        Panel2.add(Button4);

JMenuBar menuBar = new JMenuBar();
        this.setJMenuBar(menuBar);

JMenu JMenu1 = new JMenu("Fahrer");
        menuBar.add(JMenu1);

JMenuItem JMenuItem1 = new JMenuItem("Panel 1 anzeigen");
        JMenuItem JMenuItem2 = new JMenuItem("Panel 2 anzeigen");

JMenuItem1.addActionListener(this);
        JMenuItem2.addActionListener(this);

JMenu1.add(JMenuItem1);
        JMenu1.add(JMenuItem2);

this.setContentPane(Panel1);

}

public static void main(String[] args)
 {
  //Ruft die Klasse FrameMain auf und erstellt das Swing-Fenster
        FrameMain iFrameMain = new FrameMain();

iFrameMain.setTitle("Mitfahrerportal");
        iFrameMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        iFrameMain.setLocation(100,100);
        iFrameMain.setSize(700, 600);
        iFrameMain.setVisible(true);

}

public void actionPerformed(ActionEvent e)
 {
  String cmd = e.getActionCommand();

if (cmd.equals("Panel 1 anzeigen"))
  {
   this.setContentPane(Panel1);
  }

if (cmd.equals("Panel 2 anzeigen"))
  {
   this.setContentPane(Panel2);
  }
 }

}

  1. Hej,

    Für jeden Menüpunkt habe ich mit einen JPanel Container erstellt und wollte dann je nachdem welcher Menüpunkt geklickt wird diesen an die setContentPane() Methode des JFrames übergeben.

    Zunächst würde ich nicht unbedingt setContentPane() verwenden, die Methode ist zwar public, ist aber eigentlich für den internen Gebrauch des JFrames gedacht. Komponenten werden eigentlich per add() zum Frame hinzugefügt.

    Was mir auffällt, dass Du bisher noch einen Bogen um die Layoutmanager machst, die eigentlich essentiell für eine richtige Darstellung sind. In deinem Fall bietet sich dann auch das CardLayout an, welches dir bei deinem Vorhaben enorm helfen wird.

      
    
    >  private JPanel Panel1 = new JPanel(null);  
    >  private JPanel Panel2 = new JPanel(null);  
    
    ...  
    
    

    Eigentlich sollten Variablen immer mit einem Kleinbuchstaben beginnen, um sie von Klassennamen besser unterscheiden zu können.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz