Страницы

Поиск по вопросам

воскресенье, 30 июня 2019 г.

Java, скроллинг

Пытаюсь с помощью функции setValue заставить вставать verticalScrollBar в нужное положение, все работает. Но в цикле почему-то нет.
JScrollPane sp = new JScrollPane(); JScrollBar verticalScrollBar = sp.getVerticalScrollBar(); while(iМожет, нужно как то обновлять полосу прокрутки?


Ответ

Попробуйте устанавливать положение скролла вот так:
sp.getViewport().setViewPosition(...);
И я рекомендую Вам почитать про создание анимации в Swing.
UPDATE: Вы что-то делаете не так, вот я не поленился, этот способ - работает:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
public class Main extends JFrame {
public static void main(String[] args) throws Exception{ Main main = new Main(); main.setVisible(true); Thread.sleep(1000); main.animateScrollDown(); }
private final JScrollPane scrollPane = new JScrollPane(new SimpleComponent(750,1200));
private final Timer scrollTimer = new Timer(10, new TimerListener());
{ add(scrollPane); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(new Dimension(800, 600)); setLocationRelativeTo(null); }
private void animateScrollDown() { scrollTimer.start(); }
private class TimerListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JViewport viewport = scrollPane.getViewport(); Point viewPosition = viewport.getViewPosition(); viewPosition.y += 1; if (viewPosition.y > viewport.getView().getHeight() - viewport.getHeight()){ scrollTimer.stop(); } else { viewport.setViewPosition(viewPosition); } } }
private class SimpleComponent extends JComponent{
Dimension size;
public SimpleComponent(int width, int height){ size = new Dimension(width, height); setSize(size); setMinimumSize(size); setPreferredSize(size); setMaximumSize(size); }
@Override protected void paintComponent(Graphics g) { g.drawLine(0, 0, size.width, size.height); } } }

Комментариев нет:

Отправить комментарий