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