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