Вопрос

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

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

Это было полезно?

Решение 3

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

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

Адаптирован из Учебник Сана

Другие советы

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

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

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

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

Это не специальное решение, готовое к использованию в JDK.

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

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

Вы можете использовать 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

Попробуйте это, это прекрасно работает на меня 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top