如何使JScrollPane动态调整

时间:2018-01-20 13:15:20

标签: java swing tabs

我正在尝试制作一个动态标签,其中包含在应用程序中添加新标签的选项以及旁边的一些按钮...为此,我有一个主要类:

private static void initAndDisplayUI() {
        frame = new JFrame(...)

        tabbedPane = new TabbedPane();

        insertTab(tabbedPane, TabFactory.createTab(), true);
        insertNewTabButton(tabbedPane);
        ...
        }
 }

容器类:

public class TabbedPane extends JPanel {public TabbedPane() {
        this.captions = new TabCaptions();
        this.tabs = new ArrayList<Tab>();
        this.contentContainer = new JPanel(new BorderLayout());

        setLayout(new BorderLayout());
        add(captions, BorderLayout.NORTH);
        add(contentContainer, BorderLayout.CENTER);
    }

...
}

TabCaptions

public class TabCaptions extends JPanel {
    private TabCaption selectedTab;
    private JComponent tabsPane;
    private JScrollPane scrollPane;
    private JPanel buttonsPane;

    public TabCaptions() {
        createUI();
    }

    private void createUI() {
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
        setBackground(Color.DARK_GRAY);
        add(createTabsPane());
        add(createButtonsPane());
        add(Box.createHorizontalGlue());
    }

    private JComponent createTabsPane() {
        tabsPane  = new JPanel();
        tabsPane.setOpaque(false);
        tabsPane.setLayout(new BoxLayout(tabsPane, BoxLayout.X_AXIS));

        scrollPane = new JScrollPane(tabsPane, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        return tabsPane;
    }
    ...
}

因此,我有一个带有标签的区域和旁边的一些按钮。然而,应用程序窗口绘制了一个带有一些奇怪大小的scrollPane ...我想显示这个&#34;添加新标签&#34;创建选项卡旁边的按钮,在添加新选项卡时调整其大小但是在达到最大窗口宽度时显示滚动条的功能。我已经有了滚动但是如何才能使这个新页面的动态位置的行为?

1 个答案:

答案 0 :(得分:0)

  

我已经滚动了

不基于您提供的代码:

    scrollPane = new JScrollPane(tabsPane, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    return tabsPane;

您需要将JScrollPane添加到框架中,因此您需要从方法返回滚动窗格:

    scrollPane = new JScrollPane(tabsPane, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    //return tabsPane;
    return scrollPane;