【问题标题】:Java JScrollPane and FlowLayoutJava JScrollPane 和 FlowLayout
【发布时间】:2018-01-15 19:54:11
【问题描述】:

在昨天得到了本站用户的大力帮助后,我决定在这里再问一个问题,希望大家能帮助我。 我想编写一个包含组件的框架。它们需要在 JPanel 上,并且 JPanel 应该在 JScrollPane 中。

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

如果我在 JScrollPane 中使用 FlowLayout,它不会创建新行,而是水平移动,这在实际应用程序中看起来非常奇怪。我想要的是,如果窗口即将结束,则有一条新行接近。

问题是如何解决这个问题。我不能放一个preferredSize,因为垂直滚动条不会比我放preferredSize 走得更远,所以我真的不知道该怎么做......也许改变布局?我将不胜感激!

问题示例代码:

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);


    }   
}

【问题讨论】:

  • 是否可以禁用水平滚动并且组件只适合垂直行?
  • 我认为另一个答案非常适合我的问题。 WrapLayout() 我认为完美地工作。我也已经尝试过,但是我犯了一些错误,这就是我没有工作的原因。无论如何感谢您的意见!

标签: java swing jscrollpane flowlayout


【解决方案1】:

我不能放preferredSize,因为垂直滚动条不会比我放preferredSize 走得更远

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

所以解决方案是使用不同的布局管理器。

WrapLayout 扩展 FlowLayout 并覆盖首选大小计算,以在组件换行到新行时提供首选宽度和高度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多