10

我有一个带有流式布局的面板,它可以包含可变数量的项目 - 从 1 到 2000。我想把它放在一个滚动窗格中,可以在垂直方向滚动,并且宽度固定。问题是,当我将面板的首选大小设置为(800,600)之类的东西时,一些项目丢失了,并且没有滚动。如果我设置了滚动窗格的首选大小,则流窗格中的所有元素都放在一条很长的线上。

在任何元素上设置最大尺寸似乎什么都不做——布局管理器会忽略它。

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

4

2 回答 2

5

我想把它放在一个滚动窗格中,可以在垂直方向滚动,并且宽度固定

您可以为此使用Wrap Layout

不要设置面板​​的首选大小。但是您可以设置滚动窗格的首选大小,以便 frame.pack() 方法起作用。

于 2011-10-03T15:26:18.540 回答
4

您可以使用 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 可能不会。

请批评我的回答,我不确定它是否完全正确,我很想听到反对意见,以便知道我是否理解了这个问题。

于 2011-10-03T10:47:47.490 回答