Java - Dúvida: Swing/AWT - Layouts/Alinhamento

3 respostas
V

Olá galera!
Estou aqui com mais uma dúvida.
Venho tendo diversos problemas com alinhamento de layout no Swing (sempre tive), então decidi procurar algumas formas de layout.
Mas simplesmente não estou conseguindo obter resultados satisfatórios (:/).

O que está acontecendo é o seguinte:
Tenho uma JFrame que tem uma menuBar e uma JPanel que será preenchida com outra JPanel conforme o usuário usar o menuBar.

Exemplo: Eu clico na menuBar na opção configurações, prontamente o programa preenchera a JPanel “padrão” com a JPanel que contém as informações de configurações.

Enfim. O real problema é o alinhamento tanto da JPanel no JFrame como dos componentes da JPanel.

Eu li vários artigos, exemplos e até alguns tutoriais e não consegui fazer com que o meu objetivo fosse alcançado.

O objetivo é que um objeto tanto possa ficar centralizado (no caso do JPanel “principal”) e que componentes possam ficar alinhados entre si.

Segue a imagem mostrando isso:

Obs: Estava tentando usar GridBagLayout e GridBagConstraints

3 Respostas

U

Olá,

Acredito que a melhor forma para você fazer isso seria usar JInternalFrame e Painel de Área de Trabalho(JDesktopPanel), ou seja, na sua janela principal você coloca o seu menu e em baixo dele coloca o painel da área de trabalho (Conteiners Swing).

Logo após isso você cria o JInternalFrame (a mesma coisa que o JFrame, porém não executável… ele irá aparecer dentro do painel de area de trabalho), nessa janela interna, você faz a sua tela de configuração normal…

No botão do menu você cria um evento que irá puxar essa sua janela interna, ou seja, é preciso instanciar ela, coloca esses comandos dentro do evento:

<nome da sua janela interna> janelao = new <nome da sua janela>();
    janela.setLocation(10, 10); // Irá setar o lugar que vai aparecer
    desktop.add(janelaUsuario); // adiciona no seu painel de area de trabalho
    janelaUsuario.setVisible(true); // deixa visivel a janela interna

obs: Na janela interna você tambem pode usar layout para deixar organizado, aconselho usar layout de borda e de grade…

Acredito que assim irá funcionar como você deseja.

V

Alguém sabe o motivo de estar dando erro no código:

public class PanelMateria extends JPanel implements BaseLayout{
	private static final long serialVersionUID = 1L;
	
	GroupLayout layout = new GroupLayout(this);
	GroupLayout.SequentialGroup leftToRight;
	JLabel nome;
	//JLabel aulasInfantil;
	//JLabel aulasFundamental;
	//JLabel aulasMedio;
	JTextField nomeTxt;
	//JFormattedTextField aulasInfantilTxt;
	//JFormattedTextField aulasFundamentalTxt;
	//JFormattedTextField aulasMedioTxt;
	
	public PanelMateria(JFrame frame, int x, int y, int width, int height){
		this.setBounds(x, y, width, height);
		
		setLabel();
		setLayout();
		setPanel();
		setTextField();
		
		addComponents();
	}
	@Override
	public void setPanel(){
		this.setBackground(new Color(0, 160, 230));
		this.setBorder(BorderFactory.createTitledBorder("Cadastro de Matérias")); 
		this.setLayout(layout);
		this.setVisible(true);
	}
	@Override
	public void setLabel(){
		nome = new JLabel("Nome: ");
	}
	@Override
	public void setTextField(){
		nomeTxt = new JTextField(12);
	}
	@Override
	public void setLayout(){
		leftToRight = layout.createSequentialGroup();
		layout.setHorizontalGroup(leftToRight);
	}
	@Override
	public void addComponents(){
		leftToRight.addComponent(nome);
		leftToRight.addComponent(nomeTxt);
	}
}
ViniGodoy

http://www.miglayout.com/QuickStart.pdf

Criado 5 de julho de 2013
Ultima resposta 7 de jul. de 2013
Respostas 3
Participantes 3