Прокрутка JComponent в JScrollPane

Скажем, у меня есть большой JComponent:

Dimension componentSize = new Dimension(5000,5000);

И меньшая JScrollPane:

Dimension scrollPaneSize = new Dimension(500,500);

Я хочу отобразить часть моего JComponent в JScrollPane, как на картинке ниже:

J Компонент внутри JScrollPane

Белый прямоугольник - это мой JScrollPane, который в настоящее время отображает часть JComponent от (x1,y1) до (x2, y2).


Итак, что я попробовал:

Я создал новый JComponent:

JComponent component = new JComponent(){
    protected void paintComponent(Graphics g)
    {
        // Here I draw a background
    } 
};

И поместил его в виде окна просмотра в JScrollPane:

JScrollPane scrollPane = new JScrollPane();

scrollPane.setViewportView(component);

Затем я прикрепил JScrollPane к JFrame:

JFrame frame = new JFrame();

frame.setLayout(new BorderLayout());

frame.add(scrollPane, BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);

И я пытаюсь изменить видимую область с помощью:

scrollpane.getViewport().setBounds(x1,y1,500,500)

В чем дело?

2 ответа

Решение

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

Вместо этого попробуйте

component.scrollRectToVisible(new Rectangle(x1, y1, 500, 500));

Вместо...

Проверять, выписываться JComponent#scrollRectToVisible

Этот код всегда заставляет область просмотра прокручиваться независимо от размера области просмотра.

scrollPane.getViewport().setViewPosition( new Point(x1, y1) );
Другие вопросы по тегам