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.