Обновить JscrollBar без сброса позиции - PullRequest
1 голос
/ 31 октября 2010

У меня есть класс, который расширяет JScrollPane, его область просмотра - это другой класс, который расширяет JComponent и реализует Scrollable. Когда размер компонента изменяется, JscrollBars не обновляются, пока я не вызову revalidate (), однако это сбрасывает положение полос прокрутки в верхнем левом углу. Есть ли способ обновления размера полос прокрутки при сохранении их текущей позиции?

Спасибо, Роб

1 Ответ

1 голос
/ 31 октября 2010

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

У меня отлично работает.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ScrollSSCCE extends JPanel
{
    public ScrollSSCCE()
    {
        setLayout( new BorderLayout() );

        final JPanel panel = new JPanel();
        panel.setPreferredSize( new Dimension(200, 200) );
        JScrollPane scrollPane = new JScrollPane( panel );
        add( scrollPane );

        JButton button = new JButton("Adjust");
        add(button, BorderLayout.SOUTH);
        button.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                Dimension d = panel.getPreferredSize();
                d.width +=50;
                d.height +=50;
                panel.setPreferredSize(d);
                panel.revalidate();
            }
        });
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("ScrollSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new ScrollSSCCE() );
        frame.setSize(150, 150);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...