Отключить горизонтальную прокрутку в jscrollpane
У меня есть JScrollPane
с FlowLayout
, что я хочу иметь фиксированную ширину. Он должен прокручиваться только по вертикали, и содержимое должно быть перестроено автоматически при изменении размера окна. Я думаю, что должен быть такой метод, как setEnableHorizontalScroll(false)
, но он не может его найти.
Есть ли простой способ сделать это?
Ответы
Ответ 1
Наконец, я узнал, как, пожалуйста, посмотрите на этот очень короткий пример: никаких дополнительных трюков не требуется:
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
Ответ 2
Вы можете использовать:
import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);
... но это просто предотвращает показ горизонтальной полосы прокрутки.
Чтобы автоматически изменить порядок содержимого, будет зависеть от содержимого. A JTextPane
или JEditorPane
сделает это автоматически (без необходимости использования вышеуказанного кода).
Ответ 3
Это не настраиваемое решение из коробки в JDK.
Вы можете использовать WrapLayout.
Или вы можете создать пользовательскую панель и реализовать интерфейс Scrollable. Ключ в этом случае переопределяет getScrollableTracksViewportWidth(), чтобы вернуть true, поэтому ширина видового экрана, а не ширина панели используются для целей макета. Пример такого подхода можно найти в ScrollableFlowPanel
Ответ 4
Вы можете использовать org.jdesktop.swingx.JXPanel вместо javax.swing.JPanel как ViewportView вашего JScrollPane:
1. загрузите "SwingX 1.6.4 All - Binary" и добавьте банку в свой проект. Библиотеки здесь.
2. установите JXPanel как ViewportView вашей JScrollPane вместо JPanel:
JScrollPane scrollPane = new JScrollPane();
JXPanel panel = new JXPanel();
scrollPane.setViewportView(panel);
3. добавить следующие два утверждения:
panel.setScrollableTracksViewportHeight(false);
panel.setScrollableTracksViewportWidth(true);
4., то вы можете добавить элементы в JXPanel, как в JPanel
Ответ 5
Я столкнулся с этой проблемой... моим решением было изменить исходный код JScrollPane и передать дополнительный параметр для отключения горизонтальной прокрутки, Редактирование очень просто:
В строке 53:
$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {
Затем в строке 177:
if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}
Это все, что вам нужно изменить. Минимизируйте измененный исходный код и включите его на свою страницу. При инициализации jScrollPane теперь вы можете установить, хотите ли вы, чтобы она прокручивалась по горизонтали так:
$('.scroll-pane').jScrollPane("", false);
Надеюсь, что это поможет.
Ответ 6
Просто установите для дисплея значение "none", используя класс CSS для горизонтальной полосы. В нижней части jScrollPlane (после его инициализации) добавьте:
$('.jspHorizontalBar').css({ 'display': 'none' });
Если вы используете кратность на странице, а некоторые, которые НЕОБХОДИМО использовать горизонтальную полосу, вы всегда можете изменить свой таргетинг, чтобы включить родительский элемент.
Ответ 7
Просто удалите isScrollableH = percentInViewH > 1;
в jquery.jscrollpane.js