Problema ao maximizar JInternalFrame

0 respostas
W

Galera, tou com uma questão simples, mas que ta me tirando do serio, vi alguns topicos mas nada relacionado com o problema em questão.
Tenho um JDesktopPane que recebe um JMenuBar e um JToolBar, quando abro um JInternalFrame maximizado, ele despresa o JToolBar e fica colado ao JMenuBar, ou seja, o JToolBar sempre fica sobre o JInternalFrame, preparei um projeto que facilitara o entendimento, conforme segue:

[quote] - Classe main

package br.com.lumisoftware.form;

import java.awt.BorderLayout;

import java.util.ArrayList;

import java.util.Collection;
import javax.swing.JButton;

import javax.swing.JDesktopPane;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.SwingUtilities;

public class main extends JFrame{

private static final long serialVersionUID = 1706959587188808129L;
private JDesktopPane desktop = null;
private Collection<JButton> botoesFerramentas = new ArrayList<JButton>();

//Construtor que carrega no frame o menu e JToollBar
public main() throws Exception{
	super();
	this.setExtendedState(MAXIMIZED_BOTH);
	this.setJMenuBar(new Menu(this));
	this.getContentPane().add(new BarraFerramentas(0, 0, 1300, 28, true, this.popularBotoesFerramentas()) );

	// Definindo o objeto MDI
	desktop = new JDesktopPane();
	desktop.setAutoscrolls(true);
	desktop.putClientProperty("JDesktopPane.dragMode", "outline");
	
	this.getContentPane().add(desktop, BorderLayout.CENTER);

}

//Metodo generico chamado de qualquer local para carregar form's chamados no menu ou JToolBar
public void showInternalFrame(Class clazz) {
	boolean frameAtivo = false;
	JInternalFrame internalFrame = null;
	JInternalFrame[] screen = desktop.getAllFrames();
	try {
		internalFrame = (JInternalFrame) clazz.newInstance();
		for (int i = 0; i < screen.length; i++) {
			if (screen[i].getTitle().equalsIgnoreCase(internalFrame.getTitle())) {
				frameAtivo = true;
				break;
			}
		}
		if (!frameAtivo) {
			desktop.add(internalFrame);
			internalFrame.setVisible(true);
			internalFrame.setMaximum(true);//Faz os Internal Frames virem maximizados
			internalFrame.setMaximizable(true);
			internalFrame.setClosable(true);
		}

	} catch (Exception ex) {
		ex.printStackTrace();
	}
}
//Metodo main, usado para iniciar a aplicação...
public static void main(String[] args) {
	SwingUtilities.invokeLater(new Runnable() {
		public void run() {
			try {
				main thisClass = new main();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}
//Metodo que carrega uma collection de button's para serem usados na JTollBar
public Collection<JButton> popularBotoesFerramentas(){
	Icones icone = new Icones();
	botoesFerramentas.add(new JButton(icone.getImage("SelecionarEmpresa.gif")));
	botoesFerramentas.add(new JButton(icone.getImage("Sair.gif")));
	return botoesFerramentas;
}

}

  • Classe Barra de Ferramentas
    package br.com.lumisoftware.form;

import java.util.Collection;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.JToolBar;

public class BarraFerramentas extends JToolBar{

private static final long serialVersionUID = 2625481996240643109L;
//Uma classe que constroi e retorna um objeto JTollBar, com seu icones, retirei as action's para simplificar o contexto
public BarraFerramentas(int esquerda, int direita, int largura, int altura, boolean fixa, Collection<JButton> botoes){
	super();
	this.setBounds(esquerda, direita, largura, altura);
	this.setFloatable(fixa);
	Iterator interator = botoes.iterator();
	while(interator.hasNext()){
		this.add((JButton)interator.next());
		this.addSeparator();
	}
}

}

  • Classe Menu
    package br.com.lumisoftware.form;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;
public class Menu extends JMenuBar implements ActionListener {

//Classe que retorna o JMenuBar com seus subMenus e actions devidamente definidos

private static final long serialVersionUID = -3310779013013798329L;

private main aplicativo;

private static JMenu SISTEMA;

//Construtor que recebe como parametro o frame main e monta o JMenuBar

public Menu(main aplicativo) throws Exception{

super();

this.aplicativo = aplicativo;

this.add(menuSistema());

}

//Metodo que retorna um JMenu com seus submenus e actions definidos

private JMenu menuSistema() throws Exception{

SISTEMA = new JMenu(Sistema);

JMenuItem menuItem = new JMenuItem(Novo);

menuItem.setActionCommand(novo);

menuItem.addActionListener(this);

SISTEMA.add(menuItem);

SISTEMA.addActionListener(this);

return SISTEMA;

}

//Atribui a ação do subMenu novo, chamando o metodo da classe main

public void actionPerformed(ActionEvent e) {

if (novo.equals(e.getActionCommand())) { //new

aplicativo.showInternalFrame(FormListagem.class); //Metodo da classe que carrega o form correspondente

} else { //quit

//quit();

}

}

}

-Classe icones
package br.com.lumisoftware.form;

import java.net.URL;
import javax.swing.ImageIcon;

public class Icones {

//Simples classe para auxiliar na localização de imagens

private String strPath	= br/com/lumisoftware/icones/;
public ImageIcon getImage(String s)	{

	URL url = getResource(strPath + s);
	
	if(url != null)	{ return new ImageIcon(url); }
	else	{ return null; }
}

private URL getResource(String s)	{
	
	return ClassLoader.getSystemResource(s);
}

public void setPth(String strPath) 	{ this.strPath = strPath; }

}

  • Classe formListagem
    package br.com.lumisoftware.form;
import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JInternalFrame;

public class FormListagem extends JInternalFrame implements ActionListener {

//Form chamado pelo menu

private static final long serialVersionUID = -4164966244265297201L;
public FormListagem(){
	super();
}

public FormListagem(String titulo, Dimension form, Class clazz){
	super();
	this.setTitle("Formulario de Listagem de Registro");
	this.setPreferredSize(form);
	//this.setFrameIcon(new ImageIcon(getClass().getResource("/br/com/union/trabalhista/icones/Union.gif")));
	this.setLayout(null);
	this.setMaximizable(true);
	this.setClosable(true);
}

public void actionPerformed(ActionEvent arg0) {
	// TODO Auto-generated method stub

}

}

Criando um projeto e colocando essas classes em um packager br.com.lumisoftware.form, vc’s terão minha situação, Coloquei duas imagens no packager /br/com/union/trabalhista/icones, que serão carregados no JToolBar, se for executado a classe main, e clicar em menu - novo, verão o que acontece… o JInternalFrame despreza o JToolBar sendo maximizado por baixo da mesma, se arrastar a JToolBar para o lado direito e em seguida colocar novamente no lugar ele se ajusta, porém não consigo isso via codigo ao abrir a JInternalFrame.
Coloquei em forma de projeto pois alguns topicos percebi que não foram resolvidos por falta de codigo, também não soube anexar arquivos por isso coloquei-os na tela. Agradeço a atenção de todos.
Forte abraço.

Criado 24 de junho de 2008
Respostas 0
Participantes 1