@dmds

Как сделать горизонтальную прокрутку JList?

Здравствуйте, пока новичок, подскажите как решить проблему.
Никак не пойму почему не отображается горизонтальная прокрутка JList. JList добавлен на панель в BorderLayout.WEST, так как в центре допустим будет таблица, справа кнопки и т.д.
Пробовал разные варианты (в коде заккоментировал). Гуглил, но тут видимо есть нюанс с BorderLayout.WEST.

Что я хочу примерно - i.imgur.com/1PxEoeQ.jpg, вот в эклипсе слева хоть и JTree, но суть - там есть горизонтальная прокрутка если текст не влазит, и судя по всему JTree в области BorderLayout.WEST.

Код:
import java.awt.BorderLayout;
import javax.swing.*;
public class ListDemo {

	private JFrame frame;

	private JPanel mainPanel;

	public ListDemo() {

		createPartControl();
	}

	private void createPartControl() {
		frame = new JFrame();
		frame.setTitle("JList Demo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		createMainPanel();

		frame.add(new JScrollPane(mainPanel));
		frame.pack();
		frame.setLocationByPlatform(true);
		frame.setVisible(true);
	}

	private void createMainPanel() {
		mainPanel = new JPanel();
		mainPanel.setLayout(new BorderLayout());

		String[] words = { "Word1", "Word2", "Word2", "Word4", "Word5", "very long worddddddddddddddd" };
		JList<String> list = new JList<>(words);
		// list.setFixedCellWidth(100);
		JScrollPane pane = new JScrollPane(list);
		// pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		mainPanel.add(list, BorderLayout.WEST);

	}

	public static void main(String[] args) {
		new ListDemo();
	}
}
  • Вопрос задан
  • 552 просмотра
Решения вопроса 1
@zelan
Кратко обо мне не получится.
вместо листа
mainPanel.add(list, BorderLayout.WEST);

нужно вставлять скролпэйн с листом
mainPanel.add(pane, BorderLayout.WEST);

В вашем случае при изменении размеров окна будет работать самый верхний скролпейн. pack рассчитает размеры таким образом чтобы все компоненты влезли в область видимости и не включили прокрутку.
frame.add(new JScrollPane(mainPanel)); //от скролла лучше избавиться
frame.pack(); //а паком нужно уметь пользоваться,  для многих компонентов нужно указывать предпочтительный размер иначе pack может натворить дел.Я не пользуюсь им вовсе.


Лучше убрать этот скроллпейн, и задать предпочтительные размеры компонентов.

Например если добавить инициализацию предпочтительных размеров скролпейна с листом.
pane.setPreferredSize(new Dimension(50,10)); //50 ширина, 10 проигнорируется лэйоутом в данном случае.

то все должно заработать как вам нужно.

А вообще переходите на JavaFX, там все проще.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы