Проблема с прокруткой - не прокручивается при нажатии - PullRequest
0 голосов
/ 26 апреля 2011

У меня странная проблема в Java. У меня есть JScrollPane

paneScroll=new JScrollPane(nav,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

где навигация - JPanel

public class ScrollableNavigationPanelZones extends JPanel {
    private ButtonGroup buttonGroup = new ButtonGroup();
    private static final long serialVersionUID = -455651438039139284L;
    protected JViewport viewport;
    private JPanel panel;

    private int offset = 100;

    public ScrollableNavigationPanelZones() {
        super();
        setLayout(new BorderLayout());

        panel = new JPanel();
        panel.setPreferredSize(new Dimension(0,160));
        FlowLayout fl = new FlowLayout();
        fl.setVgap(5);
        fl.setAlignment(FlowLayout.LEFT);
        panel.setLayout(fl);
        add(panel,BorderLayout.CENTER);



    }
    }

, и он показывает прокрутку справа, но у него нет того маленького прямоугольника, который нужно перемещать (у меня есть стрелки вверху и внизу прокрутки, но когда я нажимаю, я не могу прокручивать). Когда я изменяю в ScrollableNavigationPanelZones panel.setPreferredSize (новое измерение (0,16000)); это работает, но показывает пустое место. Почему JScrollPane не читает реальную высоту панели? В чем ошибка? Кто-нибудь может помочь, пожалуйста?

1 Ответ

2 голосов
/ 26 апреля 2011

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

Если панель помещается на панели прокрутки, полоса прокруткипо умолчанию скрыто.Флаг VERTICAL_SCROLLBAR_ALWAYS подразумевает, что полоса прокрутки видна всегда, даже если она не нужна.Если вы установите высоту панели в 160 пикселей, а область прокрутки станет больше, вы увидите полосу прокрутки (потому что она ВСЕГДА), но не поле прокрутки (потому что на самом деле прокручивать нечего).

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

...