Menü nach Austausch eines JPanels nicht mehr sichtbar



  • Ein ähnliches Problem hatte wohl auch der Autor dieses Threads: http://www.c-plusplus.net/forum/viewtopic.php?t=60034 . Leider bekam er keine hilfreiche Antwort, weshalb ich es auch noch einmal versuchen möchte.

    Ich möchte, dass nach der Auswahl eines Menüpunktes der gesamte Fensterinhalt ausgetaucht wird, das habe ich über JPanels auch so weit hinbekommen. Allerdings liegt das JPanel nachher über dem JMenu. D.h., wenn man das Menü nach dem Austauschen eines Panels aufruft, ist es fast nicht zu erkennen. Was kann man dagegen machen? Evtl. so etwas wie JMenu.toFront() oder so etwas? Ich habe auch schon versucht, das Menü nach dem Austauschen des Panels neu zu zeichnen mit

    remove(menuBar);
    setJMenuBar(menuBar);
    

    das bringt aber nix.

    Wer nicht so ganz verstanden hat, was ich mit den Panels gemacht habe, der kann sich ja mal meine Inspirationsquelle ansehen 🙂 http://www.c-plusplus.net/forum/viewtopic.php?t=58447

    Gruß Flo



  • Könnte es sein, dass das Menü an das entfernte JPanel gebunden ist?



  • Nein, das Menü gehört zu dem Fenster, in dem die einzelnen Panels angezeigt werden (habe in der von JFrame abgeleiteten Klasse einfach nur setJMenuBar angegeben).



  • Kann das Problem nicht ganz nachvollziehen:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class ContentChange extends JFrame implements ActionListener {
    	private MPanel panel1, panel2;
    
    	ContentChange() {
    		super("ContentChange");
    		setSize(400,300);
    		setLocation(300,200);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		panel1 = new MPanel("PANEL 1");
    		panel2 = new MPanel("Das zweite Panel");
    		setContentPane(panel1);
    		createMenuBar();
    		setVisible(true);
    	}
    
    	public void createMenuBar() {
    		JMenuBar menubar = new JMenuBar();
    		JMenu change = new JMenu("Ändern");
    		change.setMnemonic('n');
    		menubar.add(change);
    		JMenuItem item = new JMenuItem("Wechsel des Panel");
    		item.setMnemonic('W');
    		item.setActionCommand("item");
    		item.addActionListener(this);
    		change.add(item);
    		setJMenuBar(menubar);
    	}
    
    	public void actionPerformed(ActionEvent e) {
    		invalidate();
    		if((JPanel)getContentPane() == panel1) {
    			setContentPane(panel2);
    		}
    		else {
    			setContentPane(panel1);
    		}
    		validate();
    	}
    
    	public static void main(String args[]) {
    		new ContentChange();
    	}
    }
    class MPanel extends JPanel {
    	String einString;
    
    	MPanel(String einString) {
    		this.einString = einString;
    	}
    
    	public void paintComponent(Graphics g) {
    		g.setColor(Color.WHITE);
    		g.fillRect(0,0,getWidth(),getHeight());
    		g.setColor(Color.RED);
    		g.drawString(einString,180,150);
    	}
    }
    

Anmelden zum Antworten