Пытаюсь с помощью функции 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);
}
}
}
Комментариев нет:
Отправить комментарий