JInternalFrame é mostrado sem barra de controle (maximizar, minimizar, etc)

4 respostas
Born_To_Be_Wild

Boa tarde, galera…

Tenho uma classe que cria um JInternalFrame dentro de um JDesktopPane. Dentro desta classe, ela cria um novo JPanel, o pinta como branco e mostra na tela. Porém, quando ela aparece não é mostrada corretamente…

Primeiro vou mostrar os códigos e por último colocarei algumas screenshots, para facilitar o entendimento.

// método main
    public static void main(String[] args) {
    	try { // configura a UI Nimbus
    	    for ( LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() )
    	        if ( "Nimbus".equals( info.getName() ) ) {
    	            UIManager.setLookAndFeel( info.getClassName() );
    	            break;
    	        } // fim do if
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
                
        MyDesktop telaPrincipal = new MyDesktop();
        telaPrincipal.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
        telaPrincipal.setSize( 600, 480 );
        telaPrincipal.setExtendedState( JFrame.MAXIMIZED_BOTH );
        telaPrincipal.setVisible( true );       
    } // fim do método main
// construtor da classe MyDesktop que estende JFrame
    public MyDesktop()
    {
        super( "Leitor de Texto" );

        desktop = new JDesktopPane();
        add( desktop );
       
    } // fim do construtor
// trata o evento do JMenuItem newFrame
        // este código está dentro de MyDesktop
        newFrame.addActionListener(
                new ActionListener()
                {
                    @Override
                    public void actionPerformed( ActionEvent e ) {
                        JInternalFrame internalFrame = new MyInternalFrame();
                        add( internalFrame );
                    } // fim do método actionPerfomed   
                } 
                );
// construtor da classe MyInternalFrame
	public MyInternalFrame()
	{
		super( "Tela Interna", true, true, true, true  );
		add( new MyPanel(), BorderLayout.CENTER );
		pack(); // configura o quadro interno de acordo com o tamanho do conteúdo
		setVisible( true );
	} // fim da classe TelaInterna
// método paintcomponent da classe MyPanel que estende JPanel
@Override
protected void paintComponent( Graphics g ) {
	super.paintComponent(g);
	setBackground( Color.WHITE );
	}

Agora as imagens…

A primeira imagem é o que aparece qnd abro o programa…

A segunda imagem mostra como a tela fica quando escolho a opção de JMenuitem newFrame. Ele cria o painel em branco, mas sem nenhuma opção de minimizar etc.

Se eu passo a seta sobre o canto superior direito, as opções aparecessem… mas não consigo redimensionar, nem nada.

Quando clico em minimizar ele não aparece no inferior esquerdo, como é comum. Este tipo de comportamento acredito que eu tenha que programar, mas por quê não aparece a barra do topo do JInternalFrame, com o título do frame interno e as opções da janela?

Obrigado!

4 Respostas

HI7M4N

Poxa, aconteceu um problema parecido comigo recentemente. No meu caso o problema era o layout, eu coloquei como null e ficou tudo certo.

ViniGodoy

E para se livrar desse problema, você criou diversos outros…

Geralmente esse tipo de problema ocorre quando:

a) Seu look&feel não está bem implementado;

b) Seu código dispara alguma exception no meio do ciclo de pintura;

c) Você inseriu o InternalFrame antes de pintar o DesktopPane;

d) Você fez uma implementação errada do método paint ou paintComponent;

O caso d não parece ser seu caso, pelo menos não ainda. Eu desconfiaria de a), b) ou c).

Tente voltar ao look&feel padrão do java e ver se o problema ainda acontece.

Born_To_Be_Wild

Eu configurei o layout para new FlowLayout e agora ele está aparecendo normalmente…

setLayout( new FlowLayout() );

ViniGodoy

Provavelmente isso é uma zica com o seu look&feel. A implementação dele não deve suportar bem todos os layout managers.

Criado 4 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 4
Participantes 3