Dopasowanie komponentów do ramki.

0

Mam JFrama którego poczatkowy rozmiar to

 
setBounds(100, 100, 450, 300);

Stworzyłem Jpanel w design

ramkaStan1.JPG

Następnie ustawiam rozmiar ramki na

 
setBounds(100, 100, 1000, 600);

Jak mogę uzyskać efekt żeby wszystkie komponenty w JPanel rozłozyły sie proporcjonalnie do rozmiaru ramki
teraz wygląda tak

teraz.JPG

a chciałbym tak jak w design

ramkaStan1.JPG

0
  1. Lepsze rozwiązanie, zmień kod tak, żeby nie było w nim żadnej instrukcji setBounds(...).
  2. Gorsze rozwiązanie, dodaj do panelu ComponentListenera, a w jego metodzie componentResized(...) poprzesuwaj wszystkie komponenty.
0

A jak spowodowac żeby komponenty JPanel rozciągały sie razem z JFrame. Ustawiłem w JFrame resizable na true ale komponenty pozostaja w tym samym miejscu. Mysle, że takie rozwiazanie mogłoby byc dla mnie wystarczajace.

0

A usunąłeś już wszystkie setBounds(...)? Metoda setBounds ustala położenie i rozmiar, więc nie oczekuj automatycznego rozciągania paneli. Ja praktycznie nie korzystam z setBounds i panele się rozciągają. W bardzo nielicznych przypadkach ręcznego rozmieszczania komponentów metodą setBounds, ustawiam dla całego okna

setResizable(false);
0

No tak ale trzeba ustawic przynajmniej raz rozmiar ramki poniewaz przy pierwszym uruchomieniu bez setBounds ramka wyglada jak zminimalizowany pasek.
Niestety nawet jak usunalem setBounds panele sie nie rozciagaja (wiem ze jakis czas temu to działało ale najprawdopodobniej cos przestawilem )
Zerknij na kod moze jest gdzies cos co blokuje automatyczne rozciaganie razem z ramka.

 
PanelOtwarciaProgramu = new JPanel();
PanelOtwarciaProgramu.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(PanelOtwarciaProgramu);

I duzo kodu ktory powstał przy tworzeniu przez design
******************************************************
JButton PrzyciskOProgramie = new JButton("O Programie");
		GroupLayout gl_PanelOtwarciaProgramu = new GroupLayout(PanelOtwarciaProgramu);
		gl_PanelOtwarciaProgramu.setHorizontalGroup(
			gl_PanelOtwarciaProgramu.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_PanelOtwarciaProgramu.createSequentialGroup()
					.addGap(5)
					.addGroup(gl_PanelOtwarciaProgramu.createParallelGroup(Alignment.LEADING)
						.addComponent(PrzyciskLogowanie, GroupLayout.PREFERRED_SIZE, 163, GroupLayout.PREFERRED_SIZE)
						.addGroup(gl_PanelOtwarciaProgramu.createSequentialGroup()
							.addComponent(PrzyciskNowyUzytkownik, GroupLayout.PREFERRED_SIZE, 163, GroupLayout.PREFERRED_SIZE)
							.addGap(124)
							.addComponent(PrzyciskOProgramie, GroupLayout.PREFERRED_SIZE, 127, GroupLayout.PREFERRED_SIZE)))
					.addGap(15))
		);
		gl_PanelOtwarciaProgramu.setVerticalGroup(
			gl_PanelOtwarciaProgramu.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_PanelOtwarciaProgramu.createSequentialGroup()
					.addGap(166)
					.addComponent(PrzyciskLogowanie, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)
					.addGap(11)
					.addGroup(gl_PanelOtwarciaProgramu.createParallelGroup(Alignment.LEADING)
						.addComponent(PrzyciskNowyUzytkownik, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)
						.addComponent(PrzyciskOProgramie, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)))
		);
		PanelOtwarciaProgramu.setLayout(gl_PanelOtwarciaProgramu);
	}
}	



0

ok metoda pack() rozwiazuje problem , slyszałem o niej ale nigdy jej nie uzywałem. Teraz na pewno bede uzywał.

0

Zawsze możesz jeszcze manulnie tworzyć gui bez używania kreatorów (wtedy masz większe możliwości rozplanowania komponentów).

Tu masz opis layout managerów w SWING:
http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

tu masz przykład aplikacji SWING, w której gui tworzone jest manualnie:
https://github.com/DanielMichalski/contacts-group

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