Oi pessoal, tudo bem?
criei uma classe extends JFrame com menu, barra de menu e menuitens (tudo usando swing).
Coloquei setSize(400,400); mas quando executo, a janela aparece pequena (só o tamanho do menu).
como faço para ela aparecer grande? ou pelo menos com o tamanho 400 por 400?
já coloquei o pack();
Atenciosamente,
Geraldo
segue meu codigo
private JMenuBar barraMenu;
private JMenu menuCadastro, menuSobre;
private JMenuItem menuContatos, menuSair;
private JLabel espaco;
private JPanel painel;
public Menu(String titulo) {
super(titulo); //aqui é a chamada ao contrutor da superclasse, deve ser a primeira instrução do construtor
this.setSize(400, 400);
this.setLocation( 300, 200 );
iniciar();
}
public void iniciar() {
espaco = new JLabel(" ");
painel = new JPanel(new GridLayout(5, 1));
painel.add(espaco);
painel.add(espaco);
painel.add(espaco);
painel.add(espaco);
painel.add(espaco);
barraMenu = new JMenuBar();
menuCadastro = new JMenu("Cadastro");
menuContatos = new JMenuItem("Contatos");
menuSair = new JMenuItem("Sair");
menuSobre = new JMenu("Sobre");
menuCadastro.add(menuContatos);
menuCadastro.add(menuSair);
barraMenu.add(menuCadastro);
barraMenu.add(menuSobre);
this.setJMenuBar(barraMenu);
this.getContentPane().add(painel);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
Menu meuMenu = new Menu("Principal");
}
[quote=entanglement]Seu problema não é o “pack” (que não é um “método de preguiçoso”. )
seu problema provavelmente é de layouts, deixa eu dar uma olhada. [/quote]
O pack() é método de preguiçoso sim pois ele comprime sua tela ao máximo, ou seja, você deixa de lado a opção de setar o tamanho da sua tela ( o que é uma boa prática ) e utiliza um tamanho “automático”.
Agora com relação ao código, cara… está bem estranho a maneira como você fez sua classe, você estaria aberto a usar GridBagLayout?? Eu vou fazer um exemplo aqui pra você e já posto.
E cara seu problema é o pack() sim… o que você está fazendo é:
public Menu(String titulo) {
super(titulo);
this.setSize(400, 400); //<< está setando o tamanho antes de qualquer coisa.
this.setLocation( 300, 200 );
iniciar(); //<< aqui você usa bem no final o método pack(); que deixa a tela com o mínimo de tamanho possível sem esconder os seus componentes que no caso são os menus.
}
Resumindo:
? Ou tire o pack do método iniciar.
? Ou troque a linha do setSize com o método iniciar()
Use um construtor de telas, como o WindowBuilder, em vez de fazer as coisas no braço. Aprenda com o código que ele faz.
Não use JLabels para “criar espaço” como você fez - isso não funciona bem, porque você não pode sobrepôr componentes de maneira simples.
Não abra a janela diretamente no construtor - o aconselhável é você fazer isso fora.
Use pack se você usar um layout manager e já tiver os componentes já criados direitinho. Se você quer começar com um determinado tamanho (o recomendável é iniciar com o último tamanho que o usuário usou ao fechar o seu sistema), não precisa usar o pack.
Exemplo:
package guj;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class TesteMenu extends JFrame {
private JMenuBar barraMenu;
private JMenu menuCadastro, menuSobre;
private JMenuItem menuContatos, menuSair;
private JPanel painel;
public void iniciar() {
// Use o gerenciador de layout adequado
painel = new JPanel();
barraMenu = new JMenuBar();
menuCadastro = new JMenu("Cadastro");
menuContatos = new JMenuItem("Contatos");
menuSair = new JMenuItem("Sair");
menuSobre = new JMenu("Sobre");
menuCadastro.add(menuContatos);
menuCadastro.add(menuSair);
barraMenu.add(menuCadastro);
barraMenu.add(menuSobre);
this.setJMenuBar(barraMenu);
this.getContentPane().add(painel);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TesteMenu frame = new TesteMenu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TesteMenu() {
setTitle("Principal");
setBounds(100, 100, 500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
iniciar();
}
}
Muito obrigado amigos: lcruz e entanglement pelas respostas.
Vocês explicam muito bem e resolveram meu problema.
Se algum dia eu puder retribuir… estou aí.
Falou,
Geraldo