Dopasowanie komponentów do ramki.

Odpowiedz Nowy wątek
2015-02-17 08:41
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

Pozostało 580 znaków

2015-02-17 08:48
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.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-02-17 09:21
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.

Pozostało 580 znaków

2015-02-17 09:40
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);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-02-17 10:08
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);
    }
}   

Pozostało 580 znaków

2015-02-17 10:53

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

Pozostało 580 znaków

2015-02-17 11:49
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[...]al/uiswing/layout/visual.html

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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