Java - tworzenie GUI

Java - tworzenie GUI
0

Tworzyłem już wcześniej interfejsy graficzne w Qt oraz w javie na platformę android.
Nigdy nie miałem aż takich problemów jak teraz, korzystając z biblioteki Swing.
W jaki sposób mogę chociażby ustawić stałą wielkość obiektu JPanel?
Dlaczego funkcje setMinimumSize/setMaximumSize nie działają?
Jak mogę zrobić 2 obiekty JPanel, z których jeden zajmuje np. 30% a drugi 70% dostępnej szerokości.

Z góry dzięki za pomoc / jakieś linki.

PS. Aktualnie korzystam z biblioteki Swing i edytora WindowBuilder w eclipse, ale to dopiero początki więc jeżeli waszym zdaniem warto się na coś przerzucić to proszę pisać :]

remigio
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 8 lat
  • Postów:357
0

spróbuj setPreferedSize() - winno pomóc.
Do konkretnego ustawienia komponentów w oknie służą przecież layout Managery. Ja korzystam z groupLayout (trochę zagmatwany i sporo pisania ale da się wytrzymać). Jest jeszcze BoxLayout. Do mniej skomplikowanych menedżerów należą flowlayout gridlayout borderlayout. Opisane na stronie Oracla.

http://download.oracle.com/javase/tutorial/uiswing/layout/using.html

edytowany 1x, ostatnio: remigio
0

Używam BoxLayout, mam 2 JPanel ustawione obok siebie.
Jak mam teraz zrobić żeby np. jeden z nich miał zawsze 100px, a drugi zajmował resztę okna?
Mogę ustawić pierwszemu preferredsize na te 100px, ale co z drugim?
Muszę dynamicznie obliczać ile ma zajmować i ustawiać preferredsize za każdym razem kiedy uzytkowanik zmienia wielkosc okna?

absent
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:23
0

PS. Aktualnie korzystam z biblioteki Swing i edytora WindowBuilder w eclipse, ale to dopiero początki więc jeżeli waszym zdaniem warto się na coś przerzucić to proszę pisać
Jasne, że warto się przerzucić, bo same biblioteki GUI Javy nie są pierwszej klasy. Jeżeli znasz Qt i Eclipse to najlepiej będzie Ci skorzystać z QtJambi. http://dev-kof.blogspot.com/2010/06/instalacja-qt-jambi-w-eclipse.html

R9
Zdecydowanie odradzam QtJambi. Programy tracą wtedy na przenośności, rosną do 10MB, a przy bardziej skomplikowanych interfejsach rzucają wyjątki. Chyba że coś poprawili, to nie rzuca wyjątków. SWING jest zdecydowanie lepszy od QtJambi, a trudny nie jest. Też pisałem w Qt i przerzucenie się na Swinga trudne nie było.
0

Zdecydowanie wolałbym to zrobić w "zwyklej" Javie.
Bez przesady, chyba da się jakoś ustalić stałą szerokość komponentu.

absent
"zwykłej" Javie? Zatem, czym jest "niezwykła" Java? Swoją drogą to głupie, że pierw pytasz się o alternatywy, a teraz wybrzydzasz bez podawania sensownego powodu.
bogdans
"Niezwykła" Java, to taka, która korzysta z zewnętrznych bibliotek. Trudno to zrozumieć? Poza tym podał sensowny powód: nie chce korzystać z bibliotek zewnętrznych.
absent
Skoro tak mu bardzo zależy na ograniczaniu się to czemu się nie ograniczy to języka kompilowanego? Tam mniej zużyje zasobów.
R9
Napisał "zwykłej" w cudzysłowie. Jest różnica między jednym jarem, a czterema + dll/so. Poza tym łatwiejsza dystrybucja na applety
0

Za mało danych by udzielić sensownej odpowiedzi:
Czy rozmiar całego okna jest stały czy też ustalany metodą pack() na podstawie rozmiarów zawartych w nim komponentów?
Ile jest komponentów w głównym oknie (dwa panele)?
Menadżerem dla okna jest BoxLayout(X_AXIS)?

0

Czy rozmiar całego okna jest stały czy też ustalany metodą pack() na podstawie rozmiarów zawartych w nim komponentów?

Nie, użytkownik może normalnie zmieniać rozmiar okna.

Ile jest komponentów w głównym oknie (dwa panele)?

Tak, załóżmy, że dwa.

Menadżerem dla okna jest BoxLayout(X_AXIS)

Wydaje mi się, że to jest najlepsze rozwiązanie, oczywiście mogę użyć innego.

W Qt wystarczyło dać jednemu z komponentów SizePolicy: expanding i już mielibyśmy efekt o który mi chodzi.

R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 10 lat
0

Ja używam edytora w NetBeansie. Jak się go umie obsługiwać, to się umie robić dobre elastyczne fragmenty interfejsów.

Tworzę komponent na panelu, wyłączam mu resizability i włączam w tym które mają sie rozszerzać.

Ewentualnie JSplitPane i ustawiasz szerokość lewego/górnego komponentu w % (tzn. w Double 0..1)

0

W jaki sposób wyłączasz resizability komponentu?
Istnieje jakaś funkcja w stylu setResizability(boolean)?

0

setResizable(false)

0

U mnie nie działa...
"The method setResizable(boolean) is undefined for the type JPanel"

R9
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 10 lat
0

setResizable jest dla Frame i JFrame.

NetBeans przerabia zrobiony interfejs na kod. Używa do tego menedżera layoutów GroupLayout:

http://4programmers.net/Pastebin/1322

Label będzie stałej szerokości, pole tekstowe będzie się rozszerzać. Kodem ciężko to trochę ogarnąć. Ta rozszerzalność jest ustawiana w momencie obsadzania całego layouta.

Z tego co wiem to sam komponent nie może decydować o swoim rozmiarze, co najwyżej określa swój minimalny, maksymalny i preferowany rozmiar. Może po prostu ustaw maksymalny rozmiar.

0

Nie sprawdziłem, ale rzeczywiście nie ma, jest tylko dla JFrame i Frame.

0

Hmm, weźmy np. środowisko netbeans (napisane w Javie).
Po uruchomieniu po lewej pojawia się drzewo katalogów, a na środku edytor teksu:
http://upload.wikimedia.org/wikipedia/commons/a/ae/NetBeans-IDE-6.7.png

Jak widać przy zmianie rozmiaru okna szerokość drzewa katalogów nie zmieni się (chyba, że bardzo zmniejszymy okno).
Na prawdę nie da się tego uzyskać w prosty sposób, bez stosowania jakichś sztuczek?

byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
0

NetBeans jest napisany z wykorzystaniem NetBeans Platform, nie w czystym Swing'u. W przeciwieństwie do Swing, uzyskanie takiego efektu w NetBeans Platform jest bardzo proste.


0

No dobra, w takim razie zaczynam pisać mój program w Qt :|
Gdyby komuś coś jeszcze wpadło do głowy to prosze pisać

NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

spróbuj zastosować borderlayout z elementem zmieniającym rozmiar w środku

jeśli chce się korzystać z layoutmanagerów, to trzeba poznać wszystkie, żeby wiedzieć kiedy jakich używać

airborn
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
0

To co chcesz osiągnąć można uzyskać stosując GridBagLayout. Obu panelom ustawiasz fill na both, oraz odpowiednie weightx proporcjonalnie do tego jak zachłannie mają korzystać z nowej przestrzeni po rozciągnięciu okna. Całość kodu wygląda mniej więcej tak:

Kopiuj
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        getContentPane().setLayout(new GridBagLayout());

        jPanel1.setBackground(new Color(238, 139, 40));

        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.3;
        gridBagConstraints.weighty = 1.0;
        getContentPane().add(jPanel1, gridBagConstraints);

        jPanel2.setBackground(new Color(235, 237, 46));

        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.7;
        gridBagConstraints.weighty = 1.0;
        getContentPane().add(jPanel2, gridBagConstraints);

Jeżeli chcesz by któryś z paneli po prawej się nie rozszerzał, wystarczy ustawić mu prefferedSize na np. 100x100 i weightx na 0.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)