Прокручиваемый JPanel

Как сделать JPanel прокручиваемым? Я реализовал прокручиваемый интерфейс еще при добавлении его на содержащую панель с помощью

tabbedPane.add("Editor", new JScrollPane(storeyEditor = new MNScrollablePanel()));

ничего не работает

Код:

public class MNScrollablePanel extends JPanel implements Scrollable {

    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    public boolean getScrollableTracksViewportWidth() {
        return false;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }
}

5 ответов

Решение

Вы должны использовать JScrollPane, А потом позвони setViewportview(Component);

Вам не нужно реализовывать прокрутку, JPanel уже прокручивается

Это работало со мной, как это....

JPanel test = new JPanel();
test.setPreferredSize(new Dimension( 2000,2000));
JScrollPane scrollFrame = new JScrollPane(test);
test.setAutoscrolls(true);
scrollFrame.setPreferredSize(new Dimension( 800,300));
this.add(scrollFrame);

JPanel не реализует Scrollable. Лучше использовать JXPanel от SwingX, который реализует Scrollable и имеет гораздо больше функций.

Как уже упоминалось во всех других публикациях, нет никаких причин для реализации интерфейса Scrollable самостоятельно. Однако, если вы просто играете вокруг, то размещенный основной код выглядит разумным. Однако вы не опубликовали свою демонстрационную программу, показывающую, как вы используете этот код. В будущем опубликуйте SSCCE с вашим вопросом. Если вы не знаете, что такое SSCCE, поищите в Интернете.

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

Таким образом, если вы выполняете пользовательское рисование на панели, вы несете ответственность за установку предпочтительного размера панели при ее изменении. Если вы используете панель с компонентами и менеджером компоновки, вам не нужно беспокоиться об этом. Но если вы используете компоненты с нулевым менеджером компоновки, у вас также будут проблемы.

Вот почему нам нужен SSCCE, потому что мы не знаем контекста того, как вы используете панель.

У меня есть новое решение для вас.

Я думаю, что вы должны использовать этот код:

storyEditor = new JPanel();
storyEditor.setPreferredSize(new Dimension(..., ...)); // Insert Here your size for the editor
JScrollPane scroller = new JScrollPane(storyEditor);
tabbedPane.add("Editor", scroller));
frame.setSize(frame.getWidth()+1, frame.getHeight()); // frame is the JFrame where the tabbed pane is into
// Maybe you can replace "frame" with "this"
// You need to resize your frame. Why, I don't know...
frame.pack();
// Your original size will be restored by calling pack

Это было решением для меня. Я надеюсь на тебя!

Другие вопросы по тегам