File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Swing / AWT / SWT and the fly likes JTabbedPane display Problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Head First Android this week in the Android forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "JTabbedPane display Problem" Watch "JTabbedPane display Problem" New topic

JTabbedPane display Problem

Johnny Clark

Joined: Jun 29, 2001
Posts: 2
I have a JTabbedPane with 2 Tabs. Each Tab is subdivided with several JPanels. On the BOTTOM (initially unselected) tab their is a Choice(Drop Down Menu). The problem is when my application starts the choice is visible, eventhough it's tab is not selected. This problem remains until I select it's tab and then reselect the original.
Anyone have this problem before
I found a piece of simple code on the net, it does the same thing. When I run this program I see the 2 password fields on page1 (correct), but I also see the 3 TextAreas on page3(incorrect). Incorrect, can someone run the code and tell me if they also see the TextAreas on start-up. Is this a problem with my enviroment setup?
import java.awt.*;
import javax.swing.*;
class TabbedPaneExample
extends JFrame
privateJTabbedPane tabbedPane;

public TabbedPaneExample()
// NOTE: to reduce the amount of code in this example, it uses
// panels with a NULL layout. This is NOT suitable for
// production code since it may not display correctly for
// a look-and-feel.

setTitle( "Tabbed Pane Application" );
setSize( 300, 200 );
setBackground( Color.gray );
JPanel topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
// Create the tab pages
// Create a tabbed pane
tabbedPane = new JTabbedPane();
tabbedPane.addTab( "Page 1", panel1 );
tabbedPane.addTab( "Page 2", panel2 );
tabbedPane.addTab( "Page 3", panel3 );
topPanel.add( tabbedPane, BorderLayout.CENTER );
public void createPage1()
panel1 = new JPanel();
panel1.setLayout( null );
JLabel label1 = new JLabel( "Username:" );
label1.setBounds( 10, 15, 150, 20 );
panel1.add( label1 );
JTextField field = new JTextField();
field.setBounds( 10, 35, 150, 20 );
panel1.add( field );
JLabel label2 = new JLabel( "Password:" );
label2.setBounds( 10, 60, 150, 20 );
panel1.add( label2 );
JPasswordField fieldPass = new JPasswordField();
fieldPass.setBounds( 10, 80, 150, 20 );
panel1.add( fieldPass );
public void createPage2()
panel2 = new JPanel();
panel2.setLayout( new BorderLayout() );
panel2.add( new JButton( "North" ), BorderLayout.NORTH );
panel2.add( new JButton( "South" ), BorderLayout.SOUTH );
panel2.add( new JButton( "East" ), BorderLayout.EAST );
panel2.add( new JButton( "West" ), BorderLayout.WEST );
panel2.add( new JButton( "Center" ), BorderLayout.CENTER );
public void createPage3()
panel3 = new JPanel();
panel3.setLayout( new GridLayout( 3, 2 ) );
panel3.add( new JLabel( "Field 1:" ) );
panel3.add( new TextArea() );
panel3.add( new JLabel( "Field 2:" ) );
panel3.add( new TextArea() );
panel3.add( new JLabel( "Field 3:" ) );
panel3.add( new TextArea() );
// Main method to get things started
public static void main( String args[] )
// Create an instance of the test application
TabbedPaneExample mainFrame= new TabbedPaneExample();
mainFrame.setVisible( true );

[This message has been edited by Johnny Clark (edited June 29, 2001).]
Johnny Clark

Joined: Jun 29, 2001
Posts: 2
OK I came up with a work around myself, in case someone has the same problem
1.Set the "under"components with setVisible(false);
2.after creating tabbed Pane add a changelistener with something like:
tabbedPane.addChangeListener(new TabListener());
3. write a subclass of ChangeListener which:
listens for the correct tab then,
sets the underComponents visible with setVisible(true),
then removes itself so that it will never be called again.
class TabListener implements ChangeListener
public void stateChanged (ChangeEvent e)
JTabbedPane tp = (JTabbedPane)e.getSource();
JPanel p = (JPanel)tp.getSelectedComponent();
if(p == commentPanel)
logicalTabbedPane.removeChangeListener(this); //removes itself
wood burning stoves
subject: JTabbedPane display Problem
It's not a secret anymore!