Наконец-то я узнал, как, пожалуйста, посмотрите этот очень короткий пример, никаких сложных приемов не требуется:
public class MyTest extends JFrame {
public static void main(String[] args) {
MyTest test = new MyTest();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(300, 200);
test.setVisible(true);
}
public MyTest() {
String[] data = {
"Arlo", "Cosmo", "Elmo", "Hugo",
"Jethro", "Laszlo", "Milo", "Nemo",
"Otto", "Ringo", "Rocco", "Rollo"
};
JList list = new JList(data);
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list.setVisibleRowCount(0);
JScrollPane scroll = new JScrollPane(list);
this.add(scroll);
}
}
Адаптировано из учебника Sun
Это не стандартное решение в JDK. .
Вы можете использовать WrapLayout .
Или вы можете создать настраиваемую панель и реализовать прокручиваемый интерфейс. Ключевым моментом в этом случае является переопределение getScrollableTracksViewportWidth () для возврата true, поэтому для целей макета используется ширина области просмотра, а не ширина панели. Пример такого подхода можно найти в ScrollableFlowPanel
Вы можете использовать:
import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
... но это просто предотвращает отображение горизонтальной полосы прокрутки.
Автоматическая перегруппировка содержимого будет зависеть от содержимого. JTextPane
или JEditorPane
сделает это за вас автоматически (без необходимости в приведенном выше коде).