JTabbedPane

O exemplo abaixo é da documentação Java sobre JTabbedPane, estou com dificuldade de incluir objetos tipo JText nos Tabs já criados, quando faço isto eles estão caindo fora dos Tabs. Como faço para no exemplo abaixo dizer em qual Tab eu que inserir o objeto ?

Obrigado.

Hugo

/*

  • TabbedPaneDemo.java is a 1.4 example that requires one additional file:
  • images/middle.gif.
    */

import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;

public class TabbedPaneDemo extends JPanel {
public TabbedPaneDemo() {
super(new GridLayout(1, 1));

    JTabbedPane tabbedPane = new JTabbedPane();
    ImageIcon icon = createImageIcon("images/middle.gif");

    JComponent panel1 = makeTextPanel("Panel #1");
    tabbedPane.addTab("Tab 1", icon, panel1,
                      "Does nothing");
    tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

    JComponent panel2 = makeTextPanel("Panel #2");
    tabbedPane.addTab("Tab 2", icon, panel2,
                      "Does twice as much nothing");
    tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

    JComponent panel3 = makeTextPanel("Panel #3");
    tabbedPane.addTab("Tab 3", icon, panel3,
                      "Still does nothing");
    tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

    JComponent panel4 = makeTextPanel(
            "Panel #4 (has a preferred size of 410 x 50).");
panel4.setPreferredSize(new Dimension(410, 50));
    tabbedPane.addTab("Tab 4", icon, panel4,
                      "Does nothing at all");
    tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

    //Add the tabbed pane to this panel.
    add(tabbedPane);
    
    //Uncomment the following line to use scrolling tabs.
    //tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}

protected JComponent makeTextPanel(String text) {
    JPanel panel = new JPanel(false);
    JLabel filler = new JLabel(text);
    filler.setHorizontalAlignment(JLabel.CENTER);
    panel.setLayout(new GridLayout(1, 1));
    panel.add(filler);
    return panel;
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

/**
 * Create the GUI and show it.  For thread safety,
 * this method should be invoked from the
 * event-dispatching thread.
 */
private static void createAndShowGUI() {
    //Make sure we have nice window decorations.
    JFrame.setDefaultLookAndFeelDecorated(true);

    //Create and set up the window.
    JFrame frame = new JFrame("TabbedPaneDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    JComponent newContentPane = new TabbedPaneDemo();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.getContentPane().add(new TabbedPaneDemo(),
                             BorderLayout.CENTER);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}

}

Olá Hugo…

você tem que incluir os textfield nos Panels contidos em cada Tab…
um exemplo… (aproveitando o construtor da classe TabbedPaneDemo):

	public TabbedPaneDemo() { 
		super(new GridLayout(1, 1)); 

		JTabbedPane tabbedPane = new JTabbedPane(); 
		ImageIcon icon = createImageIcon("images/middle.gif"); 
		
		JComponent panel1 = makeTextPanel("Panel #1");
		
		/* INCLUSÃO DE TEXTFIELD NO PANEL1 */
		JTextField textFieldPanel1 = new JTextField(10);
		panel1.add(textFieldPanel1);
		
		tabbedPane.addTab("Tab 1", icon, panel1, "Does nothing"); 
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_1); 
		
		JComponent panel2 = makeTextPanel("Panel #2"); 
		tabbedPane.addTab("Tab 2", icon, panel2, "Does twice as much nothing"); 
		tabbedPane.setMnemonicAt(1, KeyEvent.VK_2); 
		
		JComponent panel3 = makeTextPanel("Panel #3"); 
		tabbedPane.addTab("Tab 3", icon, panel3, "Still does nothing"); 
		tabbedPane.setMnemonicAt(2, KeyEvent.VK_3); 
		
		JComponent panel4 = makeTextPanel( 
		"Panel #4 (has a preferred size of 410 x 50)."); 
		panel4.setPreferredSize(new Dimension(410, 50)); 
		tabbedPane.addTab("Tab 4", icon, panel4, "Does nothing at all"); 
		tabbedPane.setMnemonicAt(3, KeyEvent.VK_4); 
		
		//Add the tabbed pane to this panel. 
		add(tabbedPane); 
		
		//Uncomment the following line to use scrolling tabs. 
		//tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
	} 

até mais…

Thiago

Obrigado pela ajuda.

Hugo.

Pessoal, não sei se posso usar uma resposta para fazer uma pergunta, se não me desculpem
Tudo o que eu adiciono no meu JTabbedPAne fica na mesma linha, o que pode ser???

package CC01_JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TesteCadastro01 extends JFrame{
	JLabel l1, l2, l3, l4, l5, l6;
	JTextField tx1, tx2, tx3, tx4;
	JPanel p1, p2;
	JTabbedPane jtp;
	
	public TesteCadastro01(){
		setSize(600, 400);
		setLocation(200, 200);
		setTitle("Casdatro");
		setUndecorated(true);
		getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
		getRootPane().setBorder(BorderFactory.createEtchedBorder(0));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		l1 = new JLabel();
		l1.setSize(200, 20);
		l1.setLocation(140, 20);
		l1.setText("Ficha de Cadastro");
		
		l2 = new JLabel();
		l2.setSize(200, 20);
		l2.setLocation(20, 50);
		l2.setText("Digite o seu nome:");
		
		tx1 = new JTextField();
		tx1.setSize(200, 20);
		tx1.setLocation(50, 50);
		
		p1 = new JPanel();
		p1.add(l1);
		p1.add(l2);
		p1.add(tx1);
		
		p2 = new JPanel();
		
		jtp = new JTabbedPane();
		jtp.addTab("Ficha de Cadastro", p1);
		jtp.addTab("Outras Informações", p2);
		
		//getContentPane().setLayout(new FlowLayout(0));
		getContentPane().add(jtp);
	}
	
	public static void main(String args[]){
		new TesteCadastro01().setVisible(true);
	}
}

Obrigado

rica,

você tem que setar um gerenciador de layout nos seus objetos JPanel.

Uma boa sugestão seria o MigLayout. Veja em www.miglayout.com.

Olá silasyudi, obrigado por responder, pois eu não conhecia o migLayout.
Só mais uma pergunta, eu poderia resolver isso com o gridLayout???

Obrigado pela ajuda silasyudi, eu consegui
Abraço