Ajudem, menu não está mudando!

:frowning:
Este código Cria uma janela com dois menus Arquivo e Cadastro, o problema é que quando seleciono o menu Cadastro e depois o sub menu Mini-Curso ele mostra o formulário, do mini curso, mas quando seleciono o submenu Palestra que está dentro de Cadastro ele não mostra o formulário da palestra, o que está faltando para ele poder mudar o formulário??? não estou entendendo!!!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;

import javax.swing.JFrame;

public class IndexMenu extends JFrame implements ActionListener, ItemListener {
    JTextArea output;
    JScrollPane scrollPane;
    String newline = "
";
    
    private Layout_Mini lay_mini;
    private Layout_Pale lay_pale;
    private JPanel labelPanel, fieldsPanel; 
    	
    Container c = getContentPane();
	
    public IndexMenu() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;
          
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

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

        menu = new JMenu("Arquivo");
        menu.setMnemonic(KeyEvent.VK_A);
        menuBar.add(menu);

        menuItem = new JMenuItem("Sobre",KeyEvent.VK_T);
        menu.add(menuItem);
        menuItem.addActionListener(new ActionListener() {
            	public void actionPerformed( ActionEvent e ) 
            { 
            	JOptionPane.showMessageDialog(null,"Trabalho sobre Mini Curso!!");
            } 
         } 
      ); 
        

        //menuItem = new JMenuItem("Sair",new ImageIcon("middle.gif"));
        menuItem = new JMenuItem("Sair",KeyEvent.VK_S);
        menu.add(menuItem);
        menuItem.addActionListener(new ActionListener() {
         public void actionPerformed( ActionEvent e ) 
            { 
            System.exit(0);
            } 
         } 
      ); 
	
	menu = new JMenu("Cadastro");
	menu.setMnemonic(KeyEvent.VK_C);
        menuBar.add(menu);
        
        //a submenu Cadastro
        menuItem = new JMenuItem("Mini-Curso",KeyEvent.VK_M);
       // menuItem.addActionListener(this);
        menu.add(menuItem);
        menuItem.addActionListener(new ActionListener() {
            	public void actionPerformed( ActionEvent e ) 
            { 
       		 //JOptionPane.showMessageDialog(null,"Mini-Curso");
       		 lay_mini = new Layout_Mini(); 
      		c.setLayout(new BorderLayout()); 
      		c.add(lay_mini,BorderLayout.CENTER); 
      		show(); 
      	    } 
         } 
      ); 

       menuItem = new JMenuItem("Palestra",KeyEvent.VK_P);
      // menuItem.addActionListener(this);
       menu.add(menuItem);
       menuItem.addActionListener(new ActionListener() { 
            public void actionPerformed( ActionEvent e ) 
            { 
            	//JOptionPane.showMessageDialog(null,"Palestra");
            	
        	lay_pale = new Layout_Pale(); 
      		c.setLayout(new BorderLayout()); 
      		c.add(lay_pale,BorderLayout.CENTER); 
      		show();
      	    } 
         } 
      );
      
      	menu = new JMenu("Inscrição");
	menu.setMnemonic(KeyEvent.VK_I);
        menuBar.add(menu);       
    }
	
        
    public void actionPerformed(ActionEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        String s = "Action event detected."
                   + newline
                   + "    Event source: " + source.getText()
                   + " (an instance of " + getClassName(source) + ")";
        System.out.println(s + newline);
    	}

    public void itemStateChanged(ItemEvent e) {
    	
    }

   protected String getClassName(Object o) {
        String classString = o.getClass().getName();
        int dotIndex = classString.lastIndexOf(".");
        return classString.substring(dotIndex+1);
    }

    public static void main(String[] args) {
        IndexMenu window = new IndexMenu();

        window.setTitle("Trabalho sobre Cadastro de Cursos");
        window.setSize(450, 260);
        window.setVisible(true);
    }
}
//menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));

Se quiserem coloco o código do Layout_Mini e Layout_Pale para vocês poderem compilar e testarem!!! pois criei dois .class separados com os campos do formulário e chamei aqui dentro!!!

Você está adicionando os layouts ao JFrame sem antes removê-los.
Experimente remover o layout anterior antes de adicionar um novo. Ao invés de criar um novo objeto gerenciador de layout, remova o componente, adicione o novo e use o método repaint().

(Tenho alguns comentários sobre o seu estilo de codificação… não que minhas sugestões estejam corretas, mas gostaria de trocar umas idéias a respeito, se você estiver a fim prosseguimos o “papo” :slight_smile: ).

Podemos prosseguir sim, o que você quer saber???

Bem, você poderia me dar um exemplo como posso fazer para remover e depois adicionar um novo, como é este método repaint().

ua.

Ôpa! Então vamos lá,

primeiro quero pedir desculpas (respondi com pressa e acabei errando), não é pra usar repaint() – nada a ver! faça assim:

 ...
menuItem.addActionListener(new ActionListener() { 
      public void actionPerformed( ActionEvent e ) { 

            c.remove(lay_pale);  // remove o componente...

            lay_mini = new Layout_Mini(); 

            c.add(lay_mini, BorderLayout.CENTER); 
            c.validateTree();
      } 
} 
 ...

O assunto é, na verdade, sobre convenções de codificação…
pequenos lançes: O nome da classe Layout_Mini() deveria ser – conforme o padrão – LayoutMini(). Os imports de javax.swing você especifica com um coringa… então não há necessidade de especificar os componentes um-a-um do mesmo pacote.

Só isso. Deixar o código mais próximo do padrão recomendado.

:wink: valeu! abração!

Valeu, entendi, muito obrigado!!!