textfield i button na środku okna (jak margin auto w css)

0

Witam,

Projektuje aplikacje w netbeansach z wykorzystaniem swinga.
Mam okno o zadanym rozmiarze (może się zmieniać).

W przypadku tekstu lub obrazków (jLabel) ustawianie na środku jest proste.

A jak ustawić pole textfield o zadanej szerokości np. 300px zawsze z jednakowym marginesem do rozmiaru okna (jednakowym od lewej i prawej, coś jak div ze stałą szerokością i margin auto w CSS)?

Innymi słowy mam pole tekstowe oraz przycisk (pole do wpisania tekstu poszukiwanego i przycisk szukaj) i chciałbym, żeby razem zawsze były one na środku okna jPanel.

Pozdrawiam
Adalgrim

0

A jakiego Layoutu używasz?

0

Najprościej pobierasz getSize() rodzica, pobierasz getSize() buttona, rozmiar rodzica dzielisz na pół aby mieć środek okienka, od tej połowy odejmujesz lub dodajesz połowę odpowiedniego rozmiaru butona i masz w ten sposób współrzędne wycentrowanego buttona.
Ale - ważna uwaga. Funkcja getSize daje prawidłowy wynik już po utworzeniu okienka i dodaniu go do utworzonego okna najwyższego poziomu. Zanim rodzic zostanie utworzony i dodany do okna wyższego poziomu (new, add i setVisible (true)), to wszelkie metody podające rozmiary podają bzdury, a nie wymiary (zwykle zera). Dlatego o rozmiarze rodzica zanim pojawi się on na ekranie musisz się dowiedzieć z innego źródła niż getSize() (np. z getPrefferedSize() (lub z jakichś zasobów potrzebnych do utworzenia swojej grafiki). Jeżeli button został stworzony i dodany do rodzica zanim na nim wykonano metodę setVisible(), to po setVisible() trzeba będzie ustawić takiego buttona za pomocą setLocation()/setSize(). Layout Managery działają dopiero po utworzeniu kontrolki/okna i dodaniu go do widocznych obiektów Swinga. Dlatego operują na właściwych już danych.
Jeżeli centrowania używać będziesz często, to zamiast czasochłonnego dzielenia przez 2 dokładnie ten sam efekt daje przesunięcie wartości o jeden bit w prawo, czyli (x >> 1).

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