Rog*_*ach 9 java swing scala scala-swing
我有一个流程布局的面板,它可以包含可变数量的项目 - 从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"));
Run Code Online (Sandbox Code Playgroud)
这当然将使用添加的每个组件的首选大小。如果您想修改 JPanel 的首选大小,请扩展它并覆盖 getPreferredSize:
class MyPanel extends JPanel(){
public Dimension getPreferredSize(){
return new Dimension(100,100);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:BoxLayout 将考虑 getPreferredSize,其他 LayoutManager 可能不会。
请批评我的回答,我不确定它是否完全正确,我很想听到反对意见,以便知道我是否理解了这个问题。