1

出于某种原因,我不能这样工作。真的应该很简单。

我有一个带有 的 JFrame BorderLayout,其中包含一个JPanel(SOUTH) 和一个 (CENTER) JPanel (itemPanel)。

itemPanel 应包裹在滚动窗格中。它的宽度 = x,并且它的所有子元素共享它的长度,所以它基本上就像一张只有 1 列的表格。

出于某种原因,我无法让滚动窗格显示滚动条(和滚动)。在 JFrame 中:

setPreferredSize(dimension);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().add("South",controlPanel);
JScrollPane scroll = new JScrollPane(itemPanel);
scroll.setBorder(null);
getContentPane().add("Center",scroll);
super.pack();
setVisible(true);

初始化并向 itemPanel 添加一些虚拟面板:

itemPanel = new ItemPanel(); // A JPanel with a flowlayout
itemPanel.setPreferredSize(new Dimension(dimension.width,0));
for(int i = 0; i < 20; i++){
  JPanel p = new JPanel();
  p.setPreferredSize(new Dimension(0,50));
  p.setBackground(i%2 == 0 ? Color.GREEN : Color.YELLOW);
  itemPanel.add(p);
}

如果省略itemPanel.setPreferredSize(new Dimension(dimension.width,0));滚动窗格显示水平滚动条,但由于 flowlayout 没有跟随宽度,它只显示一行中的组件。

4

1 回答 1

7

FlowLayout 不会重新计算面板的首选大小。仅当组件的首选大小大于滚动窗格的大小时,才会出现滚动条。

WrapLayout可能是您正在寻找的。

于 2010-08-28T23:11:21.567 回答