Как установить только предпочтительную ширину панели с макетом потока? - PullRequest
9 голосов
/ 03 октября 2011

У меня есть панель с макетом потока, и она может содержать переменное количество элементов - от 1 до 2000. Я хочу поместить ее в область прокрутки, прокручивать в вертикальном направлении и с фиксированной шириной.Проблема в том, что когда я установил предпочтительный размер панели примерно на (800 600), некоторые элементы отсутствуют, и прокрутки нет.Если я установлю предпочтительный размер области прокрутки, то все элементы в панели потоков будут помещены в одну очень длинную строку.

Установка максимального размера для любого элемента, похоже, ничего не делает - диспетчеры компоновки игнорируют его.*

Как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 03 октября 2011

Я хочу поместить его в область прокрутки, прокручивать по вертикали и с фиксированной шириной

Для этого вы можете использовать Wrap Layout .

Не устанавливайте предпочтительный размер панели. Но вы можете установить предпочтительный размер области прокрутки, чтобы метод frame.pack () работал.

3 голосов
/ 03 октября 2011

Вы можете использовать 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 могут не иметь.

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

...