Reload de JFrame

Bom dia…
Estou com uma duvida sobre carregar e descarregar um jframe.

Eu tenho um Jmenu com opções de idiomas, e qua fo o usuario clicar em uma dessas opções o programa deve dar um “reload” e passar tudo, inclusive os menus para o idioma escolhido (estou usando ResourceBundle).

Imagino q nao se deva mudar idipmas desse jeito, mas eh uma coisa pra facu e o prof quer assim.

Alguem pode me dar uma ideia de como descarregar todo o jframe e carregalo novamente no idioma novo?

Obrigado…

Feche-o e abra-o de novo.
Não existe um comando de “reload” no JFrame.

Desculpa a ignorancia, mas existe um comando pra fecha-lo em dar kill no programa…?

Sim, o método dispose(). Nada impede vc de fazer:

[code]//Fecha esse frame
public class MeuFrame extends JFrame {

public void menuEnglishActionPerformed(ActionEvent evt) {
this.dispose();
new MeuFrame().setVisible(true, englishResourceBundle);
}[/code]

Caso o usuário pressione o x, certifique-se que o seu DefaultCloseOperation não seja ExIT_ON_CLOSE. Para isso, adicione ao construtor:

Isso fará com que o evento do x tenha que ser tratado num WindowListener.

Ah vlw. Vou tentar dessa forma no meu codigo entao. se der certo falo aki…

Um NomeDoFrame.repaint(); não faz isso?

Não. O repaint simplesmente manda o JFrame se repintar. Essa mensagem ocorre o tempo todo, quando o JFrame é minimizado e maximizado, ou quando uma janela obscurece parte de seu conteúdo.

Tentei implantar o dispose.() mas não funcionou… usei ele onde eu stou tratando a seleção de idiomas no meu… Ta ae o código até o momento (é um modelo do livro do deitel ao qual estou editando de acordo com o que o professor pediu)

[code]// Demonstrando menus com seleção de idiomas.
import java.awt.Color;
import java.awt.Font;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import java.util.Locale;
import java.util.ResourceBundle;
public class MenuFrame extends JFrame
{
private final Color colorValues[] =
{ Color.BLACK, Color.BLUE, Color.RED, Color.GREEN };
private JRadioButtonMenuItem colorItems[]; // itens do menu Color
private JRadioButtonMenuItem idiomasItems[];
private JRadioButtonMenuItem fonts[]; // itens do menu Font
private JCheckBoxMenuItem styleItems[]; // itens do menu Font Style
private JLabel displayJLabel; // exibe texto de exemplo
private ButtonGroup fontButtonGroup; // gerencia itens do menu Font
private ButtonGroup colorButtonGroup; // gerencia itens do menu Color
private ButtonGroup idiomasButtonGroup;
private int style; // utilizado para criar estilos de fontes
private ResourceBundle id = null;
// construtor sem argumento para configurar a GUI
public MenuFrame()
{

     super( "Usando JMenus" );
     id = ResourceBundle.getBundle("ex2", new Locale("pt", "BR"));      
     JMenu fileMenu = new JMenu( id.getString("menu.arquivo") ); // cria o menu File
     
  // cria item de menu About...
     JMenuItem aboutItem = new JMenuItem( id.getString("arquivo.sobre") );
     
     fileMenu.add( aboutItem ); // adiciona o item about ao menu File
     aboutItem.addActionListener(
           new ActionListener() // classe interna anônima
           {
           // exibe um diálogo de mensagem quando o usuário seleciona About...
              public void actionPerformed( ActionEvent event )
              {
                 JOptionPane.showMessageDialog( MenuFrame.this,
                    id.getString("sobre.texto"),
                    id.getString("sobre.titulo"), JOptionPane.PLAIN_MESSAGE );
              } // fim do método actionPerformed
           } // fim da classe interna anônima
        ); // fim da chamada para addActionListener
     JMenuItem exitItem = new JMenuItem( id.getString("arquivo.saida") ); // cria o item exit
     
     fileMenu.add( exitItem ); // adiciona o item exit ao menu File
     exitItem.addActionListener(
           new ActionListener() // classe interna anônima
           {
           // termina o aplicativo quando o usuário clica exitItem
              public void actionPerformed( ActionEvent event )
              {
                 System.exit( 0 ); // encerra o aplicativo
              } // fim do método actionPerformed
           } // fim da classe interna anônima
        ); // fim da chamada para addActionListener
     JMenuBar bar = new JMenuBar(); // cria a barra de menus
     setJMenuBar( bar ); // adiciona uma barra de menus ao aplicativo
     bar.add( fileMenu ); // adiciona o menu File à barra de menus
     JMenu formatMenu = new JMenu( id.getString("menu.formatar") ); // cria o menu Format
     
  // array listando cores de string
     String colors[] = { id.getString("cor.preto"), id.getString("cor.azul"), id.getString("cor.vermelho"), id.getString("cor.verde") };
     JMenu colorMenu = new JMenu( id.getString("formatar.cor") ); // cria o menu Color
     
  // cria itens do menu Color com botões de opção
     colorItems = new JRadioButtonMenuItem[ colors.length ];
     colorButtonGroup = new ButtonGroup(); // gerencia cores
     ItemHandler itemHandler = new ItemHandler(); // handler para cores
  // cria itens do menu Color com botões de opção
     for ( int count = 0; count < colors.length; count++ )
     {
        colorItems[ count ] =
           new JRadioButtonMenuItem( colors[ count ] ); // cria o item
        colorMenu.add( colorItems[ count ] ); // adiciona o item ao menu Color
        colorButtonGroup.add( colorItems[ count ] ); // adiciona ao grupo
        colorItems[ count ].addActionListener( itemHandler );
     } // fim do for
     colorItems[ 0 ].setSelected( true ); // seleciona o primeiro item Color
     formatMenu.add( colorMenu ); // adiciona o menu Color ao menu Format
     formatMenu.addSeparator(); // adiciona um separador no menu
  // array listando nomes de fonte
     String fontNames[] = { id.getString("fonte.serif"), id.getString("fonte.monospaced"), id.getString("fonte.sansserif") };
     JMenu fontMenu = new JMenu( id.getString("menu.fonte") ); // cria a fonte do menu
     
  // cria itens do menu radiobutton para nomes de fonte
     fonts = new JRadioButtonMenuItem[ fontNames.length ];
     fontButtonGroup = new ButtonGroup(); // gerencia os nomes das fontes
  // criar itens do menu Font com botões de opção
     for ( int count = 0; count < fonts.length; count++ )
     {
        fonts[ count ] = new JRadioButtonMenuItem( fontNames[ count ] );
        fontMenu.add( fonts[ count ] ); // adiciona fonte ao menu Font
        fontButtonGroup.add( fonts[ count ] ); // adiciona ao grupo de botões
        fonts[ count ].addActionListener( itemHandler ); // adiciona handler
     } // fim do for
     fonts[ 0 ].setSelected( true ); // seleciona o primeiro item do menu Font
     fontMenu.addSeparator(); // adiciona uma barra separadora ao menu Font
     String styleNames[] = { id.getString("fonte.negrito"), id.getString("fonte.italico") }; // nomes dos estilos
     styleItems = new JCheckBoxMenuItem[ styleNames.length ];
     StyleHandler styleHandler = new StyleHandler(); // handler de estilo
  // criar itens do menu Style com caixas de seleção
     for ( int count = 0; count < styleNames.length; count++ )
     {
        styleItems[ count ] =
           new JCheckBoxMenuItem( styleNames[ count ] ); // para estilo
        fontMenu.add( styleItems[ count ] ); // adiciona ao menu Font
        styleItems[ count ].addItemListener( styleHandler ); // handler
     } // fim do for
     formatMenu.add( fontMenu ); // adiciona o menu Font ao menu Format
     bar.add( formatMenu ); // adiciona o menu Format à barra de menus
  // configura o rótulo para exibir texto
     displayJLabel = new JLabel( id.getString("texto"), SwingConstants.CENTER );
     displayJLabel.setForeground( colorValues[ 0 ] );
     displayJLabel.setFont( new Font( "Serif", Font.PLAIN, 72 ) );
     getContentPane().setBackground( Color.CYAN ); // configura o fundo
     add( displayJLabel, BorderLayout.CENTER ); // adiciona displayJLabel
  	
  	
  	
  	
     JMenu idiomasMenu = new JMenu( id.getString("menu.idiomas") ); // cria o menu Format
     
  // array listando idiomas de string
     String idiomas[] = { id.getString("idiomas.portugues"), id.getString("idiomas.ingles"), id.getString("idiomas.frances"), id.getString("idiomas.italiano") };
  // cria itens do menu Color com botões de opção
     idiomasItems = new JRadioButtonMenuItem[ idiomas.length ];
     idiomasButtonGroup = new ButtonGroup(); // gerencia idiomas
     //ItemHandler itemHandler = new ItemHandler(); // handler para cores
  // cria itens do menu Color com botões de opção
     for ( int count = 0; count < idiomas.length; count++ )
     {
        idiomasItems[ count ] =
           new JRadioButtonMenuItem( idiomas[ count ] ); // cria o item
        idiomasMenu.add( idiomasItems[ count ] ); // adiciona o item ao menu Color
        idiomasButtonGroup.add( idiomasItems[ count ] ); // adiciona ao grupo
        colorItems[ count ].addActionListener( itemHandler );
     } // fim do for
     idiomasItems[ 0 ].setSelected( true ); // seleciona o primeiro item Color
     bar.add( idiomasMenu ); // adiciona o menu Color ao menu Format
  	
  	
  	
  	
  	
  	
  } // fim do construtor de MenuFrame

// classe interna para tratar eventos de ação dos itens de menu
private class ItemHandler implements ActionListener
{
// processa seleções de cor e fonte
public void actionPerformed( ActionEvent event )
{
// processa a seleção de cor
for ( int count = 0; count < colorItems.length; count++ )
{
if ( colorItems[ count ].isSelected() )
{
displayJLabel.setForeground( colorValues[ count ] );
break;
} // fim do if
} // fim do for

     // processa a seleção de idioma
     	
        if (idiomasItems[0].isSelected())
        {
           id = ResourceBundle.getBundle("ex2", new Locale("pt", "BR"));
        	
        }
     	
        if (idiomasItems[1].isSelected())
        {
           id = ResourceBundle.getBundle("ex2", Locale.US);
        }
     	
        if (idiomasItems[2].isSelected())
        {
           id = ResourceBundle.getBundle("ex2", Locale.FRANCE);
        }
     	
        if (idiomasItems[3].isSelected())
        {
           id = ResourceBundle.getBundle("ex2", Locale.ITALIAN);
        }
     	
     //fim do processo de seleção de idiomas	
     	
     	
     					
     	
     // processa a seleção de fonte
        for ( int count = 0; count < fonts.length; count++ )
        {
           if ( event.getSource() == fonts[ count ] )
           {
              displayJLabel.setFont(
                 new Font( fonts[ count ].getText(), style, 72 ) );
           } // fim do if
        } // fim do for
        repaint(); // redesenha o aplicativo
     } // fim do método actionPerformed
  } // fim da classe ItemHandler

// classe interna para tratar eventos dos itens de menu com caixa de seleção
private class StyleHandler implements ItemListener
{
// processa seleções de estilo da fonte
public void itemStateChanged( ItemEvent e )
{
style = 0; // inicializa o estilo
// verifica se negrito foi selecionado
if ( styleItems[ 0 ].isSelected() )
style += Font.BOLD; // adiciona negrito ao estilo
// verifica se itálico foi selecionado
if ( styleItems[ 1 ].isSelected() )
style += Font.ITALIC; // adiciona itálico ao estilo
displayJLabel.setFont(
new Font( displayJLabel.getFont().getName(), style, 72 ) );
repaint(); // redesenha o aplicativo
} // fim do método itemStateChanged
} // fim da classe StyleHandler
} // fim da classe MenuFrame
//------------------------------------------------------------------------------------------[/code]

Aqui a simples classe para teste…

// Testando MenuFrame. import javax.swing.JFrame; public class MenuTest { public static void main( String args[] ) { MenuFrame menuFrame = new MenuFrame(); // criar MenuFrame menuFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); menuFrame.setSize( 800, 200 ); // configura o tamanho do frame menuFrame.setVisible( true ); // exibe o frame } // fim de main } // fim da classe MenuTest //------------------------------------------------------------------------------------------

Todas a linguas funcionam quando eu seto logo no começo do construtor qual o menu deve abrir… mas ainda não consigo ao selecionar outra lingua no menu ele trocar automaticamente para o idioma novo…

Continuo solicitando ajuda…

Vlw!

Você terá que passar o locale desejado para o construtor. Como eu falei, o frame não irá se redesenhar do zero.

  1. Altere seu construtor para receber o ResourceBundle como parâmetro:

[code]public MenuFrame(ResourceBundle idioma) {
super( “Usando JMenus” );
id = idioma;
//Resto de todo aquele longo código aqui
}

//E assim fica o construtor padrão
public MenuFrame() {
this(ResourceBundle.getBundle(“ex2”, new Locale(“pt”, “BR”)));
}[/code]

  1. No método que troca o idioma, feche o frame e abra-o novamente (ou seja, lá na linha 182, no lugar do repaint()):

this.dispose(); new MenuFrame(id).setVisible(true);

Vini tentei usar dessa forma e recebi esse erro:

MenuFrame.java:42:10:42:14: parse error at or before "JMenu"
JMenu fileMenu = new JMenu( id.getString(“menu.arquivo”) ); // cria o menu File
^
MenuFrame.java:42:10:42:14: parse error at or before "JMenu"
JMenu fileMenu = new JMenu( id.getString(“menu.arquivo”) ); // cria o menu File

O codigo no começo do construtor ficou exatamente assim:

[code]public MenuFrame(ResourceBundle idioma)
{

     super( "Usando JMenus" );
     id = idioma      
     JMenu fileMenu = new JMenu( id.getString("menu.arquivo") ); // cria o menu File[/code]

E tentado apenas testar o dispose() eu recebo esse outro erro:

[code] if (idiomasItems[0].isSelected())
{
id = ResourceBundle.getBundle(“ex2”, new Locale(“pt”, “BR”));
this.dispose();

        }

[/code]

MenuFrame.java:191: cannot find symbol symbol : method dispose() location: class MenuFrame.ItemHandler this.dispose(); ^

Estranho esse erro. O parse error geralmente ocorre quando existe um problema no código. Tem certeza que não faltou nenhum ; ou coisa parecida?

Outra coisa, não que que ali era uma inner class. Então, no lugar do this.dispose, use MenuFrame.this.dispose();