Posicionar os componentes dentro do JTabbedPane

2 respostas
H

Boa tarde a todos!

Bom, desenvolvi uma aplicação com diversas telas para cadastrar, alterar, deletar e exibir registros.
tudo ok, mas agora estou tentando colocar esses JPanels dentro de abas.

o problema é o seguinde, quando eu adiciono o JPanel dentro do JTabbedPane todos os elementos (JLabel, JTextField etc) perdem seu posicionamentos, de forma que ficam lado a lado (como se perdessem seus “setBounds”):

O certo seria:

Classe que to testando que cria as abas (peguei aqui do forum mesmo, hehe):

import javax.swing.JFrame;   
import javax.swing.JPanel;   
import javax.swing.JTabbedPane;   

import cadastrar.CadastrarCargo;
  
public class Formulario extends JFrame {   
  
   public Formulario() throws Exception {   
      setTitle("Usando TabbedPane");   
      setSize(800,600);   
         
      JTabbedPane pane = new JTabbedPane();   
      CadastrarCargo cad = new CadastrarCargo();
      
      pane.add(cad.retornarPainel(), "1 Panel");   
      pane.add(new JPanel(), "2 Panel");   
      pane.add(new JPanel(), "3 Panel");   
         
      add(pane);   
   }   
  
   public static void main(String args[]) throws Exception {   
      Formulario janela = new Formulario();   
      janela.setVisible(true);   
   }   
}

Agora a classe do JPanel que tentei inserir:

package cadastrar;

import java.awt.Font;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import verificar.ProximoCodigo;

public class CadastrarCargo extends JFrame {

	private JLabel title;
	private JLabel codigo;
	private JTextField Tcodigo;
	private JLabel nome;
	private JTextField Tnome;

	private JButton cadastrar;
	private JButton cancelar;

	public JLabel titulo() {
		title = new JLabel();
		title.setText("Cadastrar Cargo");
		title.setFont(new java.awt.Font("Arial", 20, 36));
		title.setBounds(20, 11, 290, 40);
		return title;
	}

	public JLabel Codigo() {
		codigo = new JLabel();
		codigo.setText("Codigo:");
		codigo.setFont(new java.awt.Font("Arial", 20, 15));
		codigo.setBounds(20, 100, 120, 20);
		return codigo;
	}

	public JTextField TCodigo() throws Exception {
		ProximoCodigo pc = new ProximoCodigo();
		Tcodigo = new JTextField(Integer.toString(pc.ProximoCargo() + 1));
		Tcodigo.setBounds(98, 100, 200, 20);
		return Tcodigo;
	}

	public JLabel Nome() {
		nome = new JLabel();
		nome.setText("Nome:");
		nome.setFont(new java.awt.Font("Arial", 20, 15));
		nome.setBounds(20, 125, 120, 20);
		return nome;
	}

	public JTextField TNome() {
		Tnome = new JTextField();
		Tnome.setBounds(98, 125, 200, 20);
		return Tnome;
	}

	public JButton cadastrar() {
		cadastrar = new JButton("Cadastrar");
		cadastrar.setBounds(180, 330, 100, 25);
		cadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				SqlCadastrar sqlc = new SqlCadastrar();
				try {
					sqlc.inserirCargo(Integer.parseInt(Tcodigo.getText()),
							Tnome.getText());
				} catch (NumberFormatException e) {
					JOptionPane
							.showMessageDialog(
									null,
									"Erro de entrada de dados: Por favor, verifique se os valores fornecidos estão dentro do formato padrão solicitado");
				} catch (SQLException sqle) {
					JOptionPane
							.showMessageDialog(
									null,
									"Erro no banco de dados: Por favor, verifique se o código fornecido já é existente");
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		return cadastrar;
	}

	public JButton cancelar() {
		cancelar = new JButton("Cancelar");
		cancelar.setBounds(305, 330, 100, 25);
		cancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				hide();
			}
		});
		return cancelar;
	}

	public ImageIcon link() {
		ImageIcon link = new ImageIcon(
				"C:/Users/Nathã/Desktop/green-background-image.jpg");
		return link;
	}

	public JLabel fundo() {
		JLabel imagem = new JLabel(link());
		imagem.setSize(600, 400);
		return imagem;
	}

	public CadastrarCargo() throws Exception {
		this.setSize(600, 400);
		this.setTitle("CADASTRAR CARGO");
		this.setContentPane(retornarPainel());
		this.setResizable(false);
		this.setLayout(null);
	}

	public JPanel retornarPainel() throws Exception {
		JPanel jp = new JPanel();
		jp.add(titulo());
		jp.add(Nome());
		jp.add(TNome());
		jp.add(Codigo());
		jp.add(TCodigo());
		jp.add(cadastrar());
		jp.add(cancelar());
		jp.add(fundo());
		return jp;
	}
}

Também ja tentei com o exemplo la dos tutoriais Java, e da no mesmo :
Alguém pode me informar o que faço de errado?

Muito obrigado pela atenção!! :smiley: :smiley:

2 Respostas

ViniGodoy

No painel onde os componentes estão, dê o comando:

É uma péssima prática, o ideal seria parar de usar o setBounds e passar a usar os layout managers, mas irá resolver seu problema por hora.

H

ViniGodoy:
No painel onde os componentes estão, dê o comando:

É uma péssima prática, o ideal seria parar de usar o setBounds e passar a usar os layout managers, mas irá resolver seu problema por hora.

Entendo, estou usando assim porque meu professor encinou, mas vou tentar seguir sua dica.

ah, a propósito, funcionou :smiley:
Muito obrigado pela atenção!

Criado 19 de janeiro de 2012
Ultima resposta 19 de jan. de 2012
Respostas 2
Participantes 2