добавить прокручиваемую jpanel к сетке - PullRequest
0 голосов
/ 19 июля 2010

Я строю сетку, заполненную ярлыками. Один из них содержит html-текст и должен иметь максимальный формат и быть прокручиваемым. Я нашел, как добавить JScrollPane, но он остается на высоте одной строки, я просто не могу найти, как изменить его размер, даже если я задаю его размер 400x400 ...

Удаление getViewport () дает тот же результат.

JPanel grid = new JPanel(new GridLayout(1,2));

// first cell of the grid
grid.add(new JLabel("title"));

// second cell of the grid, this should be the scrollable one   
JScrollPane scroll = new JScrollPane();
scroll.getViewport().setSize(400, 400);
scroll.getViewport().add(new JLabel("<html>long<br>html<br>text</html>"));
grid.add(scrollVersion, BorderLayout.CENTER);   

Есть идеи?

Большое спасибо ...

Ответы [ 3 ]

1 голос
/ 19 июля 2010

GridLayout не учитывает предпочтительный размер компонентов, которые он выкладывает. Он направлен на то, чтобы все ячейки сетки были одинакового размера. Альтернативой является использование GridBagLayout, однако я лично рекомендовал бы ZoneLayout , который (на мой взгляд) является более простым, столь же мощным и гораздо более интуитивным. С шпаргалкой вы не ошибетесь.

В качестве примечания, BorderLayout.CENTER - это ограничение, используемое для BorderLayout и не совместимое с GridLayout. Когда компоненты добавляются к владельцу GridLayout, вам не нужно предоставлять ограничения. Компоненты добавляются слева направо, начиная с верхнего левого угла ячейки, используя GridLayout.

0 голосов
/ 19 июля 2010

Все ячейки GridLayout имеют одинаковый размер, поэтому, если вы хотите, чтобы одна ячейка была больше, чем другие, вы должны использовать другой LayoutManager, например GridBagLayout, который предлагает Ридюэль.

Также, если ваша JLabel будет иметь более одной строки, я предлагаю вам заменить ее на не редактируемую JTextPane или JTextArea

0 голосов
/ 19 июля 2010

Замените ваш GridLayout на GridBagLayout .При правильном наборе ограничений он должен работать как шарм.И, конечно же, взгляните на некоторые примеры , поскольку GridBagLayout кажется довольно сложным, но довольно прост с некоторыми примерами.

...