отключить горизонтальную прокрутку в jscrollpane

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

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

8 ответов


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

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

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

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


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

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);
    }
}

адаптировано из Солнце!--5-->


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

можно использовать WrapLayout.

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


Вы можете использовать org.jdesktop.swingx.JXPanel вместо javax.качать.Для 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


попробуйте это, это работает на меня jScrollPane1.setHorizontalScrollBar (null);


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

на линии 53:

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

затем, на линии 177:

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

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

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

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


просто установите дисплей в "НЕТ", используя класс CSS для горизонтальной полосы. В нижней части jScrollPlane (после его инициализации) добавьте:

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

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


удалить isScrollableH = percentInViewH > 1; в jquery.jscrollpane не.js