首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带卷轴的2 JPanels

带卷轴的2 JPanels
EN

Stack Overflow用户
提问于 2016-10-26 20:54:30
回答 1查看 31关注 0票数 1

所以我把这个面板放置在我的框架的顶部(北)边,叫做menupanel。在这个面板中,我还有另外两个面板- topPanel和botPanel (红色和黑色)。在这两个面板中都有几个按钮(在本例中为标签)。我想增加滚动(水平)在两个面板(机器人和顶部)。

代码语言:javascript
复制
// creating the frame
    JFrame frame;
    frame = new JFrame("Test");
    frame.setVisible(true);
    frame.setLayout(new BorderLayout());
    frame.setSize(600, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // creating labels

            JLabel label1 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT");
            JLabel label2 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2");
            JLabel label3 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3");

            JLabel label4 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT");
            JLabel label5 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2");
            JLabel label6 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3");

    // creating the main and menu panel

    JPanel menupanel,topPanel,botPanel,mainpanel;
    mainpanel = new JPanel();
    menupanel = new JPanel(new BorderLayout());
    topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    botPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

    topPanel.setPreferredSize(new Dimension(300, 100));
    botPanel.setPreferredSize(new Dimension(300, 100));

    topPanel.add(label1);
    topPanel.add(label2);
    topPanel.add(label3);

    botPanel.add(label4);
    botPanel.add(label5);
    botPanel.add(label6);

    topPanel.setBackground(Color.RED);
    botPanel.setBackground(Color.BLACK);
    mainpanel.setBackground(Color.BLUE);


    JScrollPane scrollT,scrollB;
    scrollT = new JScrollPane(topPanel);
    scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollB = new JScrollPane(botPanel);
    scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    menupanel.add(scrollT);
    menupanel.add(scrollB);

    menupanel.add( topPanel, BorderLayout.NORTH );
    menupanel.add( botPanel, BorderLayout.SOUTH );


    frame.add(mainpanel, BorderLayout.CENTER);
    frame.add(menupanel, BorderLayout.NORTH);
    frame.pack();

你可以在这里看到一幅图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 21:00:24

您要向多个容器中添加组件:

代码语言:javascript
复制
scrollT = new JScrollPane(topPanel);  // topPanel added to scroll pane
scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollB = new JScrollPane(botPanel);  // botPanel added to scroll pane
scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
menupanel.add(scrollT); // scrollpanes added to menupanel -- without Borderlayout constants?
menupanel.add(scrollB);

menupanel.add( topPanel, BorderLayout.NORTH );  // topPanel added to menupanel
menupanel.add( botPanel, BorderLayout.SOUTH );

Swing GUI不允许这样做。

相反,将topPanel和botPanel添加到JScrollPanes中,将JScrollPanes添加到GUI的其余部分,但不要将topPanel和botPanel重新添加到任何东西中。

另一个问题--你限制了topPanel和僵尸面板的大小,这会使它们不滚动--避免这样做。如果需要限制某物的大小,请执行滚动窗格的视图或滚动窗格本身。

例如,

代码语言:javascript
复制
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.*;

public class ScrollPaneFun2 extends JPanel {

    private static final int PREF_W = 500;

    public ScrollPaneFun2() {
        JPanel topPanel = new JPanel(new GridLayout(0, 1));
        JPanel botPanel = new JPanel(new GridLayout(0, 1));

        for (int i = 0; i < 3; i++) {
            JPanel innerTopPanel = new JPanel(new GridLayout(1, 0, 3, 0));
            JPanel innerBotPanel = new JPanel(new GridLayout(1, 0, 3, 0));
            for (int j = 0; j < 50; j++) {
                innerTopPanel.add(new JLabel("Text " + (i + 1)));
                innerBotPanel.add(new JLabel("Text " + (i + 1)));
            }
            topPanel.add(innerTopPanel);
            botPanel.add(innerBotPanel);
        }

        JScrollPane topScrollPane = new JScrollPane(topPanel);
        JScrollPane botScrollPane = new JScrollPane(botPanel);
        topScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        botScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        setLayout(new GridLayout(0, 1));
        add(topScrollPane);
        add(botScrollPane);
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        int height = super.getPreferredSize().height;
        return new Dimension(PREF_W, height);
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame("ScrollPaneFun2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new ScrollPaneFun2());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40271934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档