Problemas com alinhamento dentro de JPanel

Pessoal,

Esse é o segundo tópico que crio com o intuito de resolver minha dúvida.

Na última semana eu tinha que desenvolver uma aplicação em Swing, então decidi fazer no netbeans, que segundo algumas fontes era mais produtivo e era bom de ser utilizado para problemas pequenos (gera código autómatico).

Terminei a aplicação, porem me interessei em entender o processo atraz das cortinas, então abri o eclipse, instalei o Windows Builder e fui fazer tudo na mão.

Segue meu código abaixo:

package br.com.lidd.mvc.swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.EmptyBorder;


public class JFrameCadastroEntrada extends JFrame{

	private JPanel painelContainer           = null;
	private JPanel painelTopo                = null;
	private JPanel painelCentro              = null;
	private JPanel painelRodape              = null;
	private JLabel tituloTopoLabel           = null;
	private JLabel questaoUmLabel            = null;
	private JLabel textoTeste                = null;
	private JRadioButton entradaRadioButton  = null;
	private JRadioButton saidaRadioButton    = null;
	private ButtonGroup questaoUmButtonGroup = null;
	
	
	// Monta o painel Principal da aplicação para armazenar os outros
    public JPanel getPainelContainer(){   
        
        if(painelContainer == null)   
        {   
        	painelContainer = new JPanel();   
    		painelContainer.setBackground(SystemColor.activeCaptionBorder);
    		painelContainer.setBorder(new EmptyBorder(5, 5, 5, 5));
    		painelContainer.setLayout(new BorderLayout(0, 0));

    		
    		painelContainer.add(getPainelTopo(), BorderLayout.NORTH);
    		painelContainer.add(getPainelCentro(), BorderLayout.CENTER); 
    		painelContainer.add(getPainelRodape(), BorderLayout.SOUTH);  
    		
    		
    		painelTopo.add(getTituloTopoLabel());
    		painelCentro.add(getQuestaoUmLabel());     
        	painelCentro.add(getEntradaRadioButton());  
        	painelCentro.add(getSaidaRadioButton());
        	painelCentro.add(getTextoTeste());
        	
        	questaoUmButtonGroup = getQuestaoUmButtonGroup();
        }   
        return painelContainer;   
    } 

	// Monta o painel do Topo da aplicação
	public JPanel getPainelTopo() {
		
		painelTopo = new JPanel(new FlowLayout(FlowLayout.CENTER));
		painelTopo.setBorder(BorderFactory.createLineBorder(Color.black));
		painelTopo.setBackground(SystemColor.activeCaptionBorder);

		return painelTopo;
	}

	// Monta o painel Central da aplicação
	public JPanel getPainelCentro() {
		
		painelCentro = new JPanel(new FlowLayout(FlowLayout.LEFT));
		painelCentro.setBorder(BorderFactory.createLineBorder(Color.black));
		painelCentro.setBackground(SystemColor.activeCaptionBorder);
		
		return painelCentro;
	}
	
	// Monta o painel Rodape da aplicação
	public JPanel getPainelRodape() {
		
		painelRodape = new JPanel(new FlowLayout(FlowLayout.LEFT));
		painelRodape.setBorder(BorderFactory.createLineBorder(Color.black));
		painelRodape.setBackground(SystemColor.activeCaptionBorder);
			
		return painelRodape;
	}

	
	// Label do titulo do topo da aplicação
	public JLabel getTituloTopoLabel() {
		
		tituloTopoLabel = new JLabel("Controle de Entrada");
		tituloTopoLabel.setFont(new Font("Tahoma", Font.BOLD, 18));
		
		return tituloTopoLabel;
	}

	// Label da primeira questão da aplicação
	public JLabel getQuestaoUmLabel() {
		
		questaoUmLabel = new JLabel("A pessoa esta:");
		questaoUmLabel.setFont(new Font("Tahoma", Font.PLAIN, 14));
		
		return questaoUmLabel;
	}
	
	// Label desalinhado
	public JLabel getTextoTeste(){
		
		textoTeste = new JLabel("Label desalinhado:");
		textoTeste.setFont(new Font("Tahoma", Font.PLAIN, 14));
		
		return textoTeste;
		
	}

	// Monta radiogroup primeira questão
	public ButtonGroup getQuestaoUmButtonGroup() {
		
		questaoUmButtonGroup = new ButtonGroup();
		questaoUmButtonGroup.add(entradaRadioButton);
		questaoUmButtonGroup.add(saidaRadioButton);
		return questaoUmButtonGroup;
	}

	// Monta radiobutton de entrada da primeira questão
	public JRadioButton getEntradaRadioButton() {
		
		entradaRadioButton = new JRadioButton("Entrada");
		entradaRadioButton.setBackground(SystemColor.activeCaptionBorder);

		return entradaRadioButton;
	}

	// Monta radiobutton de saida da primeira questão
	public JRadioButton getSaidaRadioButton() {
		
		saidaRadioButton = new JRadioButton("Saida");
		saidaRadioButton.setBackground(SystemColor.activeCaptionBorder);

		return saidaRadioButton;
	}

	
	/**
	 * Inicializa aplicação.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JFrameCadastroEntrada frame = new JFrameCadastroEntrada();
					frame.setTitle("Programa Portaria");
					frame.setVisible(true);
					frame.setBackground(SystemColor.activeCaptionBorder);
					frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					frame.setBounds(100, 100, 438, 335);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Cria frame.
	 */
	public JFrameCadastroEntrada() {
        super();   
        initialize();  
	}

    public void initialize(){   
        
        this.setSize(600,400);   

        this.setContentPane(getPainelContainer());   

    }   

}

Segue em anexo a saida do código.

Então, dai surgiu minha pedra no caminho, não consigo alinhas minhas labels(quebra de linha), como vocês podem ver no printscreen.

Preciso de ajuda para alinhar alinhar os elementos de tela no JPanel.

Grato

alguem?

Olá dertyu765

Quando vc diz:

[quote=dertyu765]Então, dai surgiu minha pedra no caminho, não consigo alinhas minhas labels(quebra de linha), como vocês podem ver no printscreen.

Preciso de ajuda para alinhar alinhar os elementos de tela no JPanel.[/quote]

Não entendi. Explique um pouco mais, talvez consiga te ajudar :smiley:

flw :thumbup:

Eu quero alinhas meus elementos de tela VERTICALMENTE.

estou fazendo um formulário, então de uma pergunta para outra deve haver uma quebra de linha… basicamente é isso que quero fazer, mas ja estou a quase 2 semanas e NADA.

Uma simples quebra de linha…

Lembrando, NÃO QUERO usar tags HTML para fazer isso, ja ve que isso é possivle no JLabel, mas acho meio gambiarra.

Olá dertyu765 :smiley:

Antes de cria suas GUI (em especial “na unha”), imagine (e se for o caso desenhe em um papel :wink: ) o que terá nelas: cada rótulo, imagem, caixa de texto. E onde e como você gostaria que eles ficassem na tela. Porque assim ao final você usa alguns JPanel, com layout manager específicos para cada um deles e montar suas telas da maneira inicial desejada.

Para resolver seu problema (eu acho que é isto, só não for ainda estou entendendo errado sua dúvida :wink: ) eu usei GridLayout (poderia ser GridBagLayout que é mais “flexível”) no lugar do seu FlowLayout do painelCentro.

Existe vários gerenciadores de layout, todos muito bom e úteis, para cada componente que você for usar. Só basta saber qual deles usar, dependendo do que for fazer.

Segue seu código alterado :slight_smile:

import java.awt.*;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.EmptyBorder;

public class JFrameCadastroEntrada extends JFrame {

    private JPanel painelContainer = null;
    private JPanel painelTopo = null;
    private JPanel painelCentro = null;
    private JPanel painelRodape = null;
    private JLabel tituloTopoLabel = null;
    private JLabel questaoUmLabel = null;
    private JLabel textoTeste = null;
    private JRadioButton entradaRadioButton = null;
    private JRadioButton saidaRadioButton = null;
    private ButtonGroup questaoUmButtonGroup = null;

    // Monta o painel Principal da aplicação para armazenar os outros  
    public JPanel getPainelContainer() {

        if (painelContainer == null) {
            painelContainer = new JPanel();
            painelContainer.setBackground(SystemColor.activeCaptionBorder);
            painelContainer.setBorder(new EmptyBorder(5, 5, 5, 5));
            painelContainer.setLayout(new BorderLayout(0, 0));


            painelContainer.add(getPainelTopo(), BorderLayout.NORTH);
            painelContainer.add(getPainelCentro(), BorderLayout.CENTER);
            painelContainer.add(getPainelRodape(), BorderLayout.SOUTH);


            painelTopo.add(getTituloTopoLabel());
            painelCentro.add(getQuestaoUmLabel());
            painelCentro.add(getEntradaRadioButton());
            painelCentro.add(getSaidaRadioButton());
            painelCentro.add(getTextoTeste());

            /**
             * Adicione aqui um sim ou não só para ocupar as 3 colunas do
             * GridLayout, a medida que você for adicionado componentes é só
             * alterar as propriedades do Layout Manager
             */
            painelCentro.add(new JRadioButton("Sim"));
            painelCentro.add(new JRadioButton("Não"));

            questaoUmButtonGroup = getQuestaoUmButtonGroup();
        }
        return painelContainer;
    }

    // Monta o painel do Topo da aplicação  
    public JPanel getPainelTopo() {

        painelTopo = new JPanel(new FlowLayout(FlowLayout.CENTER));
        painelTopo.setBorder(BorderFactory.createLineBorder(Color.black));
        painelTopo.setBackground(SystemColor.activeCaptionBorder);

        return painelTopo;
    }

    // Monta o painel Central da aplicação  
    public JPanel getPainelCentro() {
        /**
         * Substitui seu Layout Manager FlowLayout por GridLayout, onde 2, 3 ,0,
         * 0 são respectivamente: Linhas, Colunas, Espaço Horizontal (entre as
         * linhas) e Espaço Vertical (entre as colunas)
         */
        painelCentro = new JPanel(new GridLayout(2, 3, 0, 0));

        painelCentro.setBorder(BorderFactory.createLineBorder(Color.black));
        painelCentro.setBackground(SystemColor.activeCaptionBorder);
        return painelCentro;
    }

    // Monta o painel Rodape da aplicação  
    public JPanel getPainelRodape() {

        painelRodape = new JPanel(new FlowLayout(FlowLayout.LEFT));
        painelRodape.setBorder(BorderFactory.createLineBorder(Color.black));
        painelRodape.setBackground(SystemColor.activeCaptionBorder);

        return painelRodape;
    }

    // Label do titulo do topo da aplicação  
    public JLabel getTituloTopoLabel() {

        tituloTopoLabel = new JLabel("Controle de Entrada");
        tituloTopoLabel.setFont(new Font("Tahoma", Font.BOLD, 18));

        return tituloTopoLabel;
    }

    // Label da primeira questão da aplicação  
    public JLabel getQuestaoUmLabel() {

        questaoUmLabel = new JLabel("A pessoa esta:");
        questaoUmLabel.setFont(new Font("Tahoma", Font.PLAIN, 14));

        return questaoUmLabel;
    }

    // Label desalinhado  
    public JLabel getTextoTeste() {

        textoTeste = new JLabel("Label desalinhado:");
        textoTeste.setFont(new Font("Tahoma", Font.PLAIN, 14));

        return textoTeste;

    }

    // Monta radiogroup primeira questão  
    public ButtonGroup getQuestaoUmButtonGroup() {

        questaoUmButtonGroup = new ButtonGroup();
        questaoUmButtonGroup.add(entradaRadioButton);
        questaoUmButtonGroup.add(saidaRadioButton);
        return questaoUmButtonGroup;
    }

    // Monta radiobutton de entrada da primeira questão  
    public JRadioButton getEntradaRadioButton() {

        entradaRadioButton = new JRadioButton("Entrada");
        entradaRadioButton.setBackground(SystemColor.activeCaptionBorder);

        return entradaRadioButton;
    }

    // Monta radiobutton de saida da primeira questão  
    public JRadioButton getSaidaRadioButton() {

        saidaRadioButton = new JRadioButton("Saida");
        saidaRadioButton.setBackground(SystemColor.activeCaptionBorder);

        return saidaRadioButton;
    }

    /**
     * Inicializa aplicação.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    JFrameCadastroEntrada frame = new JFrameCadastroEntrada();
                    frame.setTitle("Programa Portaria");
                    frame.setVisible(true);
                    frame.setBackground(SystemColor.activeCaptionBorder);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setBounds(100, 100, 438, 335);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Cria frame.
     */
    public JFrameCadastroEntrada() {
        super();
        initialize();
    }

    public void initialize() {

        this.setSize(600, 400);

        this.setContentPane(getPainelContainer());

    }
}

Qualquer coisa post aqui, que eu ou alguém pode te ajudar.

flw :thumbup:

Eu ate usei o grid layout, mas ele gera um espaçamento enorme de linha a linha…

Mesmo com espaçamento horizontal em 0 :?:

Tente o GridBagLayout então, aqui fala tudo sobre ele por Vitor Pamplona.