Suwak przewijania

1

Witam.
Mam problem z suwakiem przewijania :/ Nie mogę zrobić, aby w końcu on sie pojawił w okienku...
Mam główne okno dziedziczące po JFrame. W nim są dwa JPanele. Chcę dodać suwak do drugiego JPanelu.
Próbowałem JScrollPane i JScrollBar, wstawiałem je raz do JFrame'a, raz do JPanela. Nawet jak mi się program kompilował, to suwak mi sie nie pojawiał :/

Drugie pytanie.
Te JPanele robię bez Layoutów. Żeby mi się wyświetlały oba w jednym oknie uzyłem metody setBounds.
Co zrobić żeby ten drugi JPanel zawsze dopasowywał się do wielkości JFrame?

0

JPanel ma być dzieckiem JScrollPane.

EDIT:
Ok, źle. Nie dzieckiem, a widokiem viewportu.

0

A dokładniej?
Jak dodałem JPanel extends JScrollPane to dalej nie działa.

W tym oknie głównym JFRame, dodałem taki kawałek kodu:

suwak = new JScrollPane(d);
    	add(suwak); 

gdzie d to ten JPanel dziedziczący po JScrollPane.

A może w innym miejscu mam to napisać?

0

Spróbowałem troszkę inaczej:

 DrawPane d = new DrawPane();
    	
    	suwak = new JScrollPane(d, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    	suwak.setBounds(200, 0, (int)dim.getWidth()-200,(int)dim.getHeight());

I dalej nie działa...

0

Zauważyłem, że wyżej nie napisałem wszystkiego.
Tu pełny kod okienka JFrame:

public Window(Dimension dim) {   	
    	setLayout(null);
    	Container contents = getContentPane();
    	DrawPane d = new DrawPane();
    	
    	suwak = new JScrollPane(d, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    	suwak.setBounds(200, 0, (int)dim.getWidth()-200,(int)dim.getHeight());
    	Menu m = new Menu (d);
    	m.setBounds(0,0,200,(int)dim.getHeight());
    	contents.add(m);
    	contents.add(suwak);
    } 
0

Mi działają suwaki, zrobiłem to tak:

class MyFrame extends JFrame{
	public MyFrame(){
		setSize(400,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		JPanel panelA = new JPanel();
		panelA.add(new JLabel("Panel A"));
		JPanel panelB = new JPanel();
		panelB.add(new JLabel("Panel B"));
		JScrollPane scroll = new JScrollPane(panelB,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		add(panelA,BorderLayout.SOUTH);
		add(scroll,BorderLayout.CENTER);
	}
}

0

Ok, dzieki ;D Suwaki sie pojawiły.
A teraz - jak zrobić, by te suwaki zaczęły działać?
Tzn. ten JPane z suwakiem ma podany rozmiar w setBounds. Jak zrobić by on się powiekszał i pozwalał działać suwakowi, jeśli obrazek jest wiekszy od okna? Próbowałem z setPreferredSize(), ale nie działa...

0

Jeżeli na panelu dodanym do panelu scorll znajdzie się coś co będzie miało większego od rozmiarów panelu, automatycznie suwki zostaną odblokowane i będą działać np:

JPanel panelB = new JPanel();
		panelB.add(new JLabel("Panel B"));
		String[] a = {"ppp","ppp"};
		JList lista = new JList(a);
		lista.setFixedCellHeight(500);
		panelB.add(lista);
		JScrollPane scroll = new JScrollPane(panelB,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		add(scroll,BorderLayout.CENTER);
0

Poszukiwacz chyba chce coś na tym panelu rysować, w takim razie nic nie sprawdza, czy obszar rysowania nie wyjeżdża za obszar Viewportu.
JPanel.setPreferredSize() (dla JPanela, nie JScrollPane'a) powinno zadziałać, jeśli Layout JScrollPane'a nie jest nullem.

0

Z layoutami działa, ale...
Jak zrobić, by móc guziki w menu, czyli lewym JPanelu samemu poustawiać? GridLayout mi zupełnie nie pasuje.

I drugie ale - gdy okienko nie jest na full screen, to suwaki są, ale nieaktywne...

1 użytkowników online, w tym zalogowanych: 0, gości: 1