Coś nie mam szczęścia do klasy JScrollPane. Już kiedyś miałem z tym problem, ale wówczas mogłem go obejść nie używając jej wcale. Tym razem muszę go użyć, a poza tym należałoby kiedyś się dowiedzieć jak z tego korzystać :)
Napisałem prosty kod testowy i sprawa wygląda tak, że JPanel rozciąga się do rozmiarów JScrollPane'a, do którego jest dodany. Przewertowałem dokumentacje i parę wątków na StackOverflow, ale niesety za wiele to nie dało.
Kod:
public Swing_06_ScrollPane()
{
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 800);
panel = new JPanel();
panel.setLayout(null);
panel.setLocation(0,0);
panel.setPreferredSize(new Dimension(400,400));
panel.setBackground(Color.GREEN);
scrollPane = new JScrollPane(panel);
scrollPane.setLocation(0,0);
scrollPane.setSize(500,500);
add(scrollPane);
setVisible(true);
}
Jak widać panel jest mniejszy niż scrollPane, ale itak rozciąga się do jego rozmiarów. W wielu miejscach czytałem, że powinno działać bez ustawiania rozmiaru JScrollPane'a, ale jeżeli kasuje tą linijkę wówczas nie pojawia się nic - tzn jest tylko czysty JFrame. Oprócz tego, jeżeli w JFrame będzie ustawiony domyślny LayoutManager - wtedy scrollPane rozciąga się na całą ramkę, razem z panelem, niezależnie od tego czy ustawię dla niego jakieś rozmiary czy nie. Ogólnie nie wiem co się dzieje :P