Posicionando componentes

4 respostas
CarlosFontana

Bom dia pessoal, criei um jpanel dentro de uma aba e não estou conseguindo posicionar os componentes na posição que desejo, ele adiciona tudo agrupado. Alguém pode me ajudar?

Obrigado!

Classe AbaCadastro

package Componentes;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class MeuPainelAbaCadastro extends JPanel {
    public JPanel painelEsquerda = new JPanel();
    public JPanel painelDireita = new JPanel();

    public JPanel painelInterno = new JPanel();
    public JPanel painelDados = new JPanel();

    public JPanel painelDadosAdicionais = new JPanel();
    public JPanel painelLabel = new JPanel();
    public JPanel painelBotao = new JPanel();

    public MeuPainelAbaCadastro(LayoutManager layoutEsquerda) {
       setLayout(new BorderLayout());
       painelEsquerda.setLayout(layoutEsquerda);
       add("Center", painelEsquerda);
       add("East", painelDireita);

       painelEsquerda.add(painelInterno);
       painelInterno.setLayout(new FlowLayout());
       painelInterno.setLayout(new BorderLayout());
       painelInterno.add("North", painelDados);
       painelInterno.add("South", painelDadosAdicionais);

       painelDadosAdicionais.setLayout(new BorderLayout());
       painelDadosAdicionais.add("West", painelLabel);
       painelDadosAdicionais.add("East", painelBotao);
       
       //painelDadosAdicionaisConsulta.setBorder(BorderFactory.createEtchedBorder());
       painelDados.setBorder(BorderFactory.createEtchedBorder());
       painelDadosAdicionais.setBorder(BorderFactory.createEtchedBorder());
    }
}

TelaCadastro

package Cadastros.Telas;

import Cadastros.Pesistencia.PersistenciaEstado;
import Componentes.MeuCampoCodigo;
import Estrutura.*;
import Componentes.MeuJTextField;
import Componentes.MeuPainelAbaCadastro;
import Componentes.MeuPainelAbaConsulta;
import Componentes.MinhaData;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;

public class TelaCadastroEstado extends TelaCadastro implements ListSelectionListener {
    
    private static TelaCadastroEstado telaCadastroEstado = null;
    private MeuCampoCodigo campoCodigo = new MeuCampoCodigo("Código", true, 5, false);
    private MinhaData campoData = new MinhaData("Data", true);
    private MeuJTextField campoNome = new MeuJTextField("Nome", true, 25);
    private MeuJTextField campoUf = new MeuJTextField("UF", true, 2);
    private DefaultTableModel dtm;
    private JTable tabela;
    private JScrollPane jsp;
    private PersistenciaEstado estado = new PersistenciaEstado();

    private MeuPainelAbaConsulta abaConsulta = new MeuPainelAbaConsulta(new GridBagLayout());
    private MeuPainelAbaCadastro abaCadastro = new MeuPainelAbaCadastro(new GridBagLayout());
    private JTabbedPane jtp = new JTabbedPane();

    private JLabel consultaSelecionado = new JLabel("Estado selecionado: ");
    private JLabel cadastroSelecionado = new JLabel("Estado Selecionado: ");

    public TelaCadastroEstado() {
        super("Cadastro de Estado");
        montaTela();
        preencheTabela();
        pack();
    }

    public void incluir() {
        super.incluir();
        estado.getPk();
        campoCodigo.setText(""+estado.getEstCodigo());
    }

    public static void getTela() {
        if (telaCadastroEstado == null) {
            telaCadastroEstado = new TelaCadastroEstado();
            Principal.jdp.add(telaCadastroEstado);
        }
        Principal.jdp.setSelectedFrame(telaCadastroEstado);
        telaCadastroEstado.requestFocus();
        Principal.jdp.moveToFront(telaCadastroEstado);
    }

    public void montaTela() {

        jtp.addTab("Consulta", abaConsulta);
        jtp.addTab("Cadastro", abaCadastro);
        add(jtp);

        abaCadastro.painelDireita.add(painelBotoes);
        painelBotoes.setLayout(new GridLayout(12, 1));
        painelBotoes.remove(jbConsultar);
        abaCadastro.painelDireita.setBorder(BorderFactory.createEtchedBorder());

        adicionarComponente(1,18,1,1, campoData, "Data", CIMA, abaCadastro.painelDados);  // É um método de uma classe TelaCadastro tentei fazer com setBaunds () mas também não posiciona onde eu quero.....
        adicionarComponente(3,2,1,1, campoCodigo, "Código", CIMA, abaCadastro.painelDados);
        adicionarComponente(3,4,3,1, campoNome, "Nome", CIMA, abaCadastro.painelDados);
        adicionarComponente(3,11,1,1, campoUf, "UF", CIMA, abaCadastro.painelDados);

        String[] colunas = new String[] {"Código", "Data Cadastro", "Nome", "UF"};
        String[][] dados = new String[][] {};

        dtm = new DefaultTableModel(dados, colunas);
        tabela = new JTable(dtm);
        tabela.getSelectionModel().addListSelectionListener(this);

        jsp = new JScrollPane(tabela);
        jsp.setPreferredSize(new Dimension (575,300));

        abaConsulta.painelDados.add(jsp);
        abaConsulta.painelDadosAdicionais.add(consultaSelecionado); 
        abaConsulta.painelBotao.add(jbSair2);

        abaCadastro.painelDadosAdicionais.add(cadastroSelecionado);
    }
}

[img]

[/img]

Desde já agradeço!

4 Respostas

G

Amigo eu estava com um problema semelhante ao seu,resolvi da seguinte forma, em vez da classe q ficará "dentro’ da aba do tabbetPane extender Jpanel eu fiz ela Extends Container dei um setLayout e organizei os elementos(ai fica a seu critério como organizar,
Depos na classe q contem o tabbetPane eu coloquei
meuTabbetPane.addTab(“Nome da Aba”, new MinhaClasse())
Ai o container se ajusta dentro da aba do tabbetPane

B

Olá carlos,

Tem este Tutorial na net que pode te dar uma luz http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JPanel.html

Tende dimensionar seu “painelEsquerda” e “painelInterno”, a proposito não sei se percebeu mas você esta setando 2 vezes o layout do painelInterno:

painelInterno.setLayout(new FlowLayout());  
painelInterno.setLayout(new BorderLayout());

Mais uma coisa para evitar problemas de escrita e “bug” desnecessario sempre que possivel utilize as constantes que a API do Java oferece, tal como:

add( BorderLayout.CENTER, painelEsquerda);

[]'s,
e boa sorte

Flavio_machine

Vou te dar um dica que vale um milhão de dólares, se estiver o Windows utilize o layout dele, tem layout que nem com reza brava da certo.

CarlosFontana

Valeu pessoal, vou ver se consigo!

Até mais!

Criado 14 de outubro de 2011
Ultima resposta 15 de out. de 2011
Respostas 4
Participantes 4