我有一个带有流式布局的面板,它可以包含可变数量的项目 - 从 1 到 2000。我想把它放在一个滚动窗格中,可以在垂直方向滚动,并且宽度固定。问题是,当我将面板的首选大小设置为(800,600)之类的东西时,一些项目丢失了,并且没有滚动。如果我设置了滚动窗格的首选大小,则流窗格中的所有元素都放在一条很长的线上。
在任何元素上设置最大尺寸似乎什么都不做——布局管理器会忽略它。
我怎样才能解决这个问题?
我有一个带有流式布局的面板,它可以包含可变数量的项目 - 从 1 到 2000。我想把它放在一个滚动窗格中,可以在垂直方向滚动,并且宽度固定。问题是,当我将面板的首选大小设置为(800,600)之类的东西时,一些项目丢失了,并且没有滚动。如果我设置了滚动窗格的首选大小,则流窗格中的所有元素都放在一条很长的线上。
在任何元素上设置最大尺寸似乎什么都不做——布局管理器会忽略它。
我怎样才能解决这个问题?
我想把它放在一个滚动窗格中,可以在垂直方向滚动,并且宽度固定
您可以为此使用Wrap Layout。
不要设置面板的首选大小。但是您可以设置滚动窗格的首选大小,以便 frame.pack() 方法起作用。
您可以使用 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 可能不会。
请批评我的回答,我不确定它是否完全正确,我很想听到反对意见,以便知道我是否理解了这个问题。