Java 如何使用空布局将JScrollPane添加到JTabbedPane上?
我想在我的选项卡上实现一个滚动条。然而,没有任何迹象表明,也没有例外 我想我需要一个: scrollPane.setViewportView(scrollPanel) 但效果不太好 我想知道当向JTab添加JSCROLPANE时,如何在不使用显式框架的情况下将其设置为可见。如果我使用框架并将其添加到框架上,它将创建一个新窗口。 然而,我如何得到这个程序的框架看起来建成,我想,这使一切复杂化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
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-绝对是一个正确的观点!