首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JScrollPane和FlowLayout

Java JScrollPane和FlowLayout
EN

Stack Overflow用户
提问于 2018-01-15 19:54:11
回答 1查看 2.1K关注 0票数 2

昨天我从这个网站上的用户那里得到了很大的帮助之后,我决定在这里再问一个问题,希望你们能帮我。我想编写一个在them.They中包含组件的框架,它需要在JPanel上,而JPanel应该在JScrollPane中。

现在,问题是我需要为面板使用一个FlowLayout,因为我不知道面板中有多少组件。

如果我在JScrollPane,中使用FlowLayout,它不会创建新行,而只是横向地创建,在实际应用程序中这看起来非常奇怪。我真正想要的是,如果窗口结束,一条新的行即将到来。

问题是如何解决这个问题。我不能放置一个preferredSize,因为垂直ScrollBar不会比我把preferredSize放得更远,所以我真的不知道do...maybe会改变布局吗?我很感激你的帮助!

问题的示例代码:

代码语言:javascript
复制
public class scroller extends JFrame {

    Container c;
    JPanel p;
    JScrollPane pane;
    JButton button1;
    JButton button2;
    JButton button3;
    JButton button4;

    public scroller() {
        c = getContentPane();
        c.setLayout(new BorderLayout());
        p = new JPanel();
        p.setLayout(new FlowLayout());
        pane = new JScrollPane(p);
        button1 = new JButton("OK1");
        p.add(button1);
        button2 = new JButton("OK2");
        p.add(button2);
        button3 = new JButton("OK3");
        p.add(button3);
        button4 = new JButton("OK4");
        p.add(button4);
        p.setVisible(true);
        c.add(pane,BorderLayout.CENTER);

    }

    public static void main(String[] args) {
        scroller window = new scroller();
        window.setSize(200,200);
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    }   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-15 20:03:18

我不能放置preferredSize,因为垂直ScrollBar不会比放置preferredSize更远

正确的是,在将组件添加到面板时,需要动态计算preferredSize()。FlowLayout的默认首选大小计算假定有一行组件。

因此,解决方案是使用不同的布局管理器。

WrapLayout扩展FlowLayout并重写首选大小计算,以便在组件换到新行时给出首选宽度和高度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48269796

复制
相关文章

相似问题

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