отключить горизонтальную прокрутку в jscrollpane - PullRequest
14 голосов
/ 13 ноября 2009

У меня есть JScrollPane с FlowLayout, который я хочу иметь фиксированной ширины Он должен прокручиваться только по вертикали, а содержимое должно автоматически перестраиваться при изменении размера окна. Я думаю, что должен быть метод, подобный setEnableHorizontalScroll(false), но не могу его найти.

Есть ли простой способ сделать это?

Ответы [ 8 ]

22 голосов
/ 13 ноября 2009

Вы можете использовать:

import static javax.swing.ScrollPaneConstants.*;
// ...
JScrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER);

... но это только предотвращает показ горизонтальной полосы прокрутки.

Автоматическое перераспределение содержимого будет зависеть от содержимого. A JTextPane или JEditorPane сделает это автоматически (без необходимости использования вышеуказанного кода).

7 голосов
/ 08 декабря 2009

Наконец-то я узнал, как, пожалуйста, посмотрите на этот очень короткий пример, никаких дополнительных хитростей не требуется:

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

6 голосов
/ 13 ноября 2009

Это нестандартное решение из коробки в JDK.

Вы можете использовать WrapLayout .

Или вы можете создать собственную панель и реализовать интерфейс Scrollable. Ключ в этом случае переопределяет getScrollableTracksViewportWidth () для возврата true, поэтому ширина области просмотра, а не ширина панели используется для макета. Пример такого подхода можно найти в ScrollableFlowPanel

1 голос
/ 13 июля 2015

Вы можете использовать org.jdesktop.swingx.JXPanel вместо javax.swing.JPanel в качестве ViewportView вашей JScrollPane:

1. скачайте "SwingX 1.6.4 All - Binary" и добавьте jar в библиотеки вашего проекта здесь.

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

0 голосов
/ 17 мая 2018

попробуйте это, это прекрасно работает на мне jScrollPane1.setHorizontalScrollBar (нуль);

0 голосов
/ 30 ноября 2012

Просто удалите isScrollableH = percentInViewH > 1; в jquery.jscrollpane.js

0 голосов
/ 18 декабря 2011

Просто установите отображение «none», используя класс CSS для горизонтальной полосы. В нижней части вашего jScrollPlane (после того, как вы его инициализировали), добавьте:

$('.jspHorizontalBar').css({ 'display': 'none' });

Если на странице используются мультипликаторы и некоторые, которым НУЖНА горизонтальная полоса, вы всегда можете изменить таргетинг, включив в него родительский элемент.

0 голосов
/ 30 ноября 2010

Я тоже сталкивался с этой проблемой ... Мое решение состояло в том, чтобы изменить исходный код JScrollPane и передать дополнительный параметр для отключения горизонтальной прокрутки. Редактирование действительно простое:

В строке 53:

$.fn.jScrollPane = function (settings, horizontalScrollingEnabled) {

Затем в строке 177:

if (horizontalScrollingEnabled) {
isScrollableH = percentInViewH > 1;
} else {
isScrollableH = false;
}

Это все, что вам нужно изменить. Сократите измененный исходный код и включите его на своей странице. При инициализации jScrollPane вы теперь можете установить, хотите ли вы, чтобы она прокручивалась по горизонтали, примерно так:

$('.scroll-pane').jScrollPane("", false);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...