Duvida com JTabbedPanel

2 respostas
G

Boa Noite pessoal!

Estou com um problema, não consigo entender o que esta dano errado com o JTabbedPanel
quando eu copilo o código as guias aparece uma em cima da outra.
Sera que só pode usar JTabbedPanel no JFrame sem colocar em um JPanel e nao ter mais nenhum JPanel dentro do JFrame?
[color=red]
obs: a janela não esta toda pronta tirei os botões para não deixa codigo fonte grande de mais para ler.[/color]

O codigo fonte da tela esta embaixo o metodo que eu uso para criar um JTabbedPanel é montarPainelAbas().

package br.com.devmedia.completeswingapp.frames;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;

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

public class TesteJTabbedPanel extends JDialog{

	public TesteJTabbedPanel(Frame parent, boolean modal){
		super(parent, modal);
		criarPainelAnimal();
	}
	
	public void criarPainelAnimal(){
		JPanel painelAnimal= new JPanel();
		painelAnimal.setLayout(new FlowLayout());
		painelAnimal.add(criarMenuBotoes());
		painelAnimal.add(montarPainelAbas());
		setTitle("Animal of System");
		setSize(455, 425);
		add(painelAnimal);
		setResizable(false);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);	
	}
	
	public JPanel criarMenuBotoes(){
		
		JPanel painelPrincipal = new JPanel();
		painelPrincipal.setLayout(new BorderLayout());
		painelPrincipal.setBorder(new javax.swing.border.EtchedBorder()); 
		painelPrincipal.setPreferredSize(new Dimension(400,70));
		
		return painelPrincipal;
	}

	public JTabbedPane montarPainelAbas(){
		
		JTabbedPane tabbedPane = new JTabbedPane();
		JPanel panelAba1 = new JPanel();
		panelAba1.setLayout(new FlowLayout());
		tabbedPane.setSize(new Dimension(100,100));
		JPanel panelAba2 = new JPanel();
	
		tabbedPane.addTab("Tab 1", panelAba1);
		tabbedPane.addTab("Tab 2", panelAba2);
		return tabbedPane;
	}	
	
	public static void main(String[] args){
		JFrame frame = new JFrame();
		
		TesteJTabbedPanel teste = new TesteJTabbedPanel(frame, true);
		teste.setVisible(true);
	}
}

2 Respostas

TerraSkilll

Grohl
Não sei o que você tentou fazer exatamente, mas imagino que, com o flowlayout, os painéis do JTabbePane fiquem do tamanho do painel que você adiciona dentro deles. Se você mudar isso (ou adicionar os componentes aos painéis), a coisa se ajeite.

De todo modo, acho que com o BorderLayout a coisa fica mais ajeitada:
import java.awt.Frame; 
import java.awt.Dimension; 
import java.awt.BorderLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.*;

public class TesteJTabbedPanel extends JDialog{

	public TesteJTabbedPanel(Frame parent, boolean modal){
		super(parent, modal);
		this.setLayout(new BorderLayout());
		JTabbedPane tb = new JTabbedPane();

		JPanel painel1 = new JPanel();
		JPanel painel2 = new JPanel();
		JPanel topo = new JPanel();
		
		this.setSize(new Dimension(500, 500));
		
		topo.add(new JLabel("Um label qualquer"));
		painel1.add(new JLabel("Um label qualquer no painel 1"));
		painel2.add(new JLabel("Um label qualquer no painel 2"));

		tb.addTab("Aba 1", painel1);
		tb.addTab("Aba 2", painel2);

		getContentPane().add(tb, BorderLayout.CENTER);
		getContentPane().add(topo, BorderLayout.NORTH);
	}
	
	public static void main(String[] args){
		JFrame frame = new JFrame();
		
		TesteJTabbedPanel teste = new TesteJTabbedPanel(frame, true);
		teste.setVisible(true);
	}
}
Abraço.
G

TerraSkilll
Vlw pela ajuda eu só precisei mudar uma linha do método montarPainelAbas()
parece que o método setSize não funciona numa JTabbedPane , mas o método setPreferredSize
ajusta o tamanho deixando as guias corretamente.

o código que eu fiz a correção esta embaixo.

public JTabbedPane montarAbasPainel(){
		
		JTabbedPane tabbedPane = new JTabbedPane();
		tabbedPane.setPreferredSize(new Dimension(400,300));// correção estava com o método setSize
		
		JPanel panelAba1 = new JPanel();
		JPanel panelAba2 = new JPanel();
	
		tabbedPane.addTab("Tab 1", panelAba1);
		tabbedPane.addTab("Tab 2", panelAba2);
		return tabbedPane;
		
	}
Criado 3 de outubro de 2012
Ultima resposta 4 de out. de 2012
Respostas 2
Participantes 2