Java прокрутки с пролива - PullRequest
       38

Java прокрутки с пролива

1 голос
/ 29 августа 2010

По какой-то причине я не могу это работать. Это должно быть просто на самом деле.

У меня есть JFrame с BorderLayout, который содержит JPanel (ЮГ) и (ЦЕНТР) JPanel (itemPanel).

itemPanel должен быть обернут в область прокрутки. Его ширина = x, и все его дочерние элементы имеют общую длину, поэтому он в основном работает как таблица с одним столбцом.

По какой-то причине я не могу заставить полосу прокрутки показывать полосы прокрутки (и прокрутки). В 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));, полоса прокрутки показывает горизонтальные полосы прокрутки, но, поскольку у разметки потока нет ширины, которой нужно следовать, она просто показывает компоненты в одной строке.

1 Ответ

7 голосов
/ 29 августа 2010

FlowLayout НЕ пересчитывает предпочтительный размер панели.Полосы прокрутки появляются только тогда, когда предпочтительный размер компонента больше, чем размер области прокрутки.

WrapLayout может быть тем, что вы ищете.

...