Прокрутка JComponent в JScrollPane
Скажем, у меня есть большой JComponent:
Dimension componentSize = new Dimension(5000,5000);
И меньшая JScrollPane:
Dimension scrollPaneSize = new Dimension(500,500);
Я хочу отобразить часть моего JComponent в 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) );