Jebathon
Jebathon

Reputation: 4581

How to add a JScrollPane onto a JTabbedPane using a null layout?

I want to implement a Scrollbar onto my Tab. However nothing is showing and there are no exceptions.

I think I need a:

scrollPane.setViewportView(scrollPanel);

But it didn't work as well.

I am wondering when adding a Jscrollpane onto a JTab how do you set it visible without using an explicit frame. If I use a frame and add it on the frame it creates a new window. However how I got this program the Frame looks built I assume and this complicates everything.

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame {

    private     JTabbedPane tabbedPane;
    private     JPanel      panel; // Page where I want JScrollPane intisialized

    public Test()
    {
        setTitle( "Program" );
        setSize( 400, 200 ); // I want the JScrollPane to extend to 400 vertically


        JPanel topPanel = new JPanel();
        topPanel.setLayout( new BorderLayout() );
        getContentPane().add( topPanel );

        // Create the tab pages
        createPage1();

        tabbedPane = new JTabbedPane();
        tabbedPane.addTab( "Welcome", panel );
        topPanel.add( tabbedPane, BorderLayout.CENTER );    
    }

    public void createPage1()
    {
        panel = new JPanel();
        panel.setLayout( null ); // sets layout to null

////////////////////////
JPanel scrollPanel = new JPanel();
scrollPanel.setLayout(null);
scrollPanel.setPreferredSize(new Dimension(400,400));
///////////////////////

        panel.add(scrollPanel);
        scrollPanel.setVisible (true);

    }

    public static void main( String args[] )
    {
        // Create an instance of the test application
        Test mainFrame  = new Test();
        mainFrame.setVisible( true );
    }
}

If you have any questions don't hesitate to ask.

Upvotes: 2

Views: 6754

Answers (1)

Rob I
Rob I

Reputation: 5747

What you want is to use a JScrollPane. Change the createPage1() method to something like this:

public void createPage1()
{
    panel = new JPanel();
    panel.setLayout( new BorderLayout() );

    ////////////////////////
    JScrollPane scrollPanel = new JScrollPane();
    scrollPanel.setViewportView(new JLabel("hellossssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"));
    scrollPanel.setPreferredSize(new Dimension(400,400));
    ///////////////////////

    panel.add(scrollPanel,BorderLayout.CENTER);
}

And you will see a scrollbar. Note this change encompasses four things:

  1. replace the null layout call with a BorderLayout
  2. make a JScrollPane instead of a JPanel
  3. add something to the pane for demo purposes
  4. remove the unnecessary setVisible(true) call.

Upvotes: 5

Related Questions