Java 如何使用空布局将JScrollPane添加到JTabbedPane上?

Java 如何使用空布局将JScrollPane添加到JTabbedPane上?,java,swing,jframe,jscrollpane,jtabbedpane,Java,Swing,Jframe,Jscrollpane,Jtabbedpane,我想在我的选项卡上实现一个滚动条。然而,没有任何迹象表明,也没有例外 我想我需要一个: scrollPane.setViewportView(scrollPanel) 但效果不太好 我想知道当向JTab添加JSCROLPANE时,如何在不使用显式框架的情况下将其设置为可见。如果我使用框架并将其添加到框架上,它将创建一个新窗口。 然而,我如何得到这个程序的框架看起来建成,我想,这使一切复杂化 import java.awt.*; import javax.swing.*; public clas

我想在我的选项卡上实现一个滚动条。然而,没有任何迹象表明,也没有例外

我想我需要一个:

scrollPane.setViewportView(scrollPanel)

但效果不太好

我想知道当向JTab添加JSCROLPANE时,如何在不使用显式框架的情况下将其设置为可见。如果我使用框架并将其添加到框架上,它将创建一个新窗口。 然而,我如何得到这个程序的框架看起来建成,我想,这使一切复杂化

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 );
    }
}
如果您有任何问题,请毫不犹豫地提出。

您想要的是使用。将
createPage1()
方法更改为类似以下内容:

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);
}
你会看到一个滚动条。请注意,此更改包含四个方面:

  • null
    布局调用替换为
    BorderLayout
  • 制作一个
    JScrollPane
    而不是
    JPanel
  • 为演示目的在窗格中添加一些内容
  • 删除不必要的
    setVisible(true)
    调用

  • 是的,有一个问题,为什么不使用布局管理器呢?而且,您的
    滚动面板中没有任何内容,所以您可能很难判断它何时可见。您实际上并没有创建一个
    JScrollPane
    ,所以不会有滚动条。我觉得空布局对于我想要做的事情更灵活。TBH你的权利-我需要加入一个。我以后很可能会使用BorderLayout来处理所有事情。很简单:永远不要在没有LayoutManager的情况下编写任何ui。LayoutManager肯定是一个不错的选择,但你永远不会想要(aka:setXXSize with XX=min/pref/max)对不起,我只粘贴了所需的部分代码-用我编辑过的答案代码替换整个方法。还有@kleopatra-绝对是一个正确的观点!