Подтвердить что ты не робот

Прокручиваемый 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;
    }
}
4b9b3361

Ответ 1

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

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

Ответ 2

Он работал со мной так...

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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