Boa tarde pessoal,
estou desenvolvendo uma telinha simples de CRUD, estou utilizando o windowBuilder(eclipse), os meus componentes não querem aparecer no layout, como menu, labels texts, eu setei o layout como absolute.
Alguem poderia me informar o oque esta ocorrendo ?
Removi os meus componentes e deixei apenas o menu e mesmo assim nao esta apresentando.
package br.com.catalogoclientes.view;
import java.awt.EventQueue;
public class SobreClientesUI extends JFrame {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SobreClientesUI window = new SobreClientesUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public SobreClientesUI() {
getContentPane().setLayout(null);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnNewMenu = new JMenu("Clientes");
menuBar.add(mnNewMenu);
JMenuItem mntmD = new JMenuItem("Importar ...");
mnNewMenu.add(mntmD);
JMenuItem mntmCadastrar = new JMenuItem("Cadastrar");
mnNewMenu.add(mntmCadastrar);
JMenuItem mntmListar = new JMenuItem("Listar");
mnNewMenu.add(mntmListar);
JMenuItem mntmAlterarDados = new JMenuItem("Alterar dados");
mnNewMenu.add(mntmAlterarDados);
JMenuItem mntmExportarParaXml = new JMenuItem("Exportar em formato XML");
mnNewMenu.add(mntmExportarParaXml);
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Você precisa definir os bounds do componente, com o comando setBounds.
Eles não tem como saber onde parar magicamente.
Agora, melhor ainda é você usar os gerenciadores de layout.
Com o WindowBuilder, fica bem fácil usá-los.
Tópico movido para o fórum de interface gráfica. Outra opção seria Framework, Ferramentas e Utilitários. Mas não Java Básico.
Por favor, leia com atenção a lista de fóruns antes de postar.
faltou vc adicionar o menubar no construtor do SobreClientsUI apos ser inicializado
//inicializa o frame . . .
initialize();
frame.add(menuBar);
outra coisa, eu vi que vc extendeus JFrame, e colocou outro frame como atributo, seria pra fazer um popup (frame = popup, SobreUI = tela principal)?
[quote=ViniGodoy]Você precisa definir os bounds do componente, com o comando setBounds.
Eles não tem como saber onde parar magicamente.
Agora, melhor ainda é você usar os gerenciadores de layout.
Com o WindowBuilder, fica bem fácil usá-los.[/quote]
Ola Vini,
O absolute layout não seria um gerenciador de layout?
[quote=lucasirc]
faltou vc adicionar o menubar no construtor do SobreClientsUI apos ser inicializado
//inicializa o frame . . .
initialize();
frame.add(menuBar);
Eu add no meu frame mas o layout desconfigurou. ficou como o panel normal alinhado a esquerda.
outra coisa, eu vi que vc extendeus JFrame, e colocou outro frame como atributo, seria pra fazer um popup (frame = popup, SobreUI = tela principal)? [/quote]
Não. Como vc pode ver na linha:
getContentPane().setLayout(null);
Trata-se de não usar layout nenhum.
Ola pessoal,
deu certo aqui, fiz da seguinte forma,
não precisei setar os bounds, removi o frame interno como o lucasirc sugeriu, e alterei minhas referencias internas para this e não para o frame que estava utilizando.
O problema seria que o frame interno estava sobrepondo meu frame com os componentes ?
ele nao estava sobrepondo, simplemente vc nao estava utilizando as funcionalidades do JFrame da classe SobreClientesUI, vc estava utilizando o frame para ser a sua janela, e o SobreClientesUI estava sendo apenas uma classe que “configurava” o seu atributo frame e ao mesmo tempo estava extendendo classe JFrame,
o correto foi como diz ter feito, remove o atributo frame, e utiliza SobreClientesUI é como janela. e o atributo frame utilizaria para abrir um popup ou outra coisa … . .
[quote=ViniGodoy]Não. Como vc pode ver na linha:
getContentPane().setLayout(null);
Trata-se de não usar layout nenhum.[/quote]
A certo, agora entendi o que vc tinha dito, obrigado.
ele nao estava sobrepondo, simplemente vc nao estava utilizando as funcionalidades do JFrame da classe SobreClientesUI, vc estava utilizando o frame para ser a sua janela, e o SobreClientesUI estava sendo apenas uma classe que “configurava” o seu atributo frame e ao mesmo tempo estava extendendo classe JFrame,
o correto foi como diz ter feito, remove o atributo frame, e utiliza SobreClientesUI é como janela. e o atributo frame utilizaria para abrir um popup ou outra coisa … . .
[/quote]
entendi obrigado.