JScrollpane не прокручивает большой контент

У меня есть простой пример, когда я хочу отобразить большую панель в маленьком кадре. Документация Java сообщает, что панель прокрутки автоматически подгонит свое содержимое к области просмотра и добавит полосы прокрутки. Однако мне не повезло. Ни панель прокрутки, ни ее содержимое не отображаются. Вот что я пробовал.

public class MyWindow extends JFrame {
    JPanel panel;
    JScrollPane scroll;

    public MyWindow(){  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel = new JPanel();
        panel.setSize(1000,1000);
        scroll = new JScrollPane(panel);

        add(scroll,BorderLayout.CENTER);
        setSize(300, 300);
        setVisible(true);
    }
}

Как указано в аналогичных вопросах,

  1. Я сделал панель больше, чем рамка.
  2. Я добавил макет границы в рамку.

Все равно не повезло.


person user3041058    schedule 01.11.2014    source источник


Ответы (1)


JScrollPane может игнорировать начальный размер панели. Вам нужно установить предпочтительный размер

panel = new JPanel() {
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(1000, 1000);
    };
};
person Reimeus    schedule 01.11.2014
comment
Странный ! Спасибо. Я потратил на это день. - person user3041058; 01.11.2014
comment
@ user3041058, это решит проблему с простым кодом, который вы разместили. . Java documentation tell the scrollpane will automatically fit its contents in its viewport and add scrollbars - но в реальном приложении вы должны использовать менеджер компоновки, и менеджер компоновки определит предпочтительный размер панели на основе правил менеджера компоновки и предпочтительного размера компонентов, которые вы добавляете на панель. Если вы не создаете пользовательский компонент, вам действительно не следует переопределять метод getPreferredSize(). Позвольте менеджеру компоновки выполнять свою работу. - person camickr; 01.11.2014