我有一个带流程布局的面板,它可以包含可变数量的项目 - 从1到2000.我想将它放在滚动窗格内,可以垂直方向滚动,并且具有固定宽度。问题是,当我将面板的首选大小设置为类似(800,600)时,某些项目丢失,并且没有滚动。如果我设置了滚动窗格的首选大小,那么流窗格中的所有元素都会放在一个很长的行上。
在任何元素上设置最大大小似乎什么都不做 - 布局管理器忽略它。
我该如何解决这个问题?
答案 0 :(得分:5)
我想将它放在滚动窗格中,可以垂直方向滚动,并且具有固定宽度
您可以使用Wrap Layout进行此操作。
不要设置面板的首选大小。但是您可以设置滚动窗格的首选大小,以便frame.pack()方法起作用。
答案 1 :(得分:3)
您可以使用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可能不会。
请批评我的回答,我不确定这是完全正确的,我很想听到异议,以便知道我是否理解这个问题。