我有一个具有流布局的面板,它可以包含可变数量的项-从1到2000。我想将其放在滚动 Pane 中,可以在垂直方向上滚动并具有固定的宽度。问题是,当我将面板的首选大小设置为(800,600)时,缺少某些项目,并且没有滚动。如果我设置了滚动 Pane 的首选大小,那么流 Pane 中的所有元素都放在很长的一行上。

在任何元素上设置最大大小似乎根本无济于事-布局管理器将其忽略。

我怎样才能解决这个问题?

最佳答案

您可以使用BoxLayout来执行此操作:

JPanel verticalPane = new JPanel();
verticalPane.setLayout(new BoxLayout(verticalPane, BoxLayout.Y_AXIS));

JScrollPane pane = new JScrollPane(verticalPane);

//add what you want to verticalPane
verticalPane.add(new JButton("foo"));
verticalPane.add(new JButton("bar"));

当然,这将使用添加的每个组件的首选大小。如果要修改首选大小(例如,JPanel),请对其进行扩展并覆盖getPreferredSize:
class MyPanel extends JPanel(){
    public Dimension getPreferredSize(){
         return new Dimension(100,100);
    }
}

注意:BoxLayout将考虑getPreferredSize,其他LayoutManager可能不会考虑。

请批评我的回答,我不确定这是完全正确的,而且我很想听到异议,以便知道我是否理解问题。

09-10 23:34