2010-05-21 12 views

Odpowiedz

3

Zazwyczaj robi się to przy użyciu menedżera układu. Na przykład, jeśli używasz GridBagLayout, ustawisz insets na obiekcie GridBagConstraint na żądaną wartość.

Inną opcją jest użycie obiektu Box i dodanie struktury poziomej lub pionowej. Zobacz javadoc dla Box.createVerticalStrut(int width) i podobne createHorizontalStrut.

+0

Tak, mógłbym użyć 'Box', ale kod będzie tak brzydki, jeśli mam wiele marginesów Box ... – Jonas

+0

Czy próbowałeś używać wstawek? Jaki układ obecnie używasz? Jak skomplikowany jest twój wyświetlacz? –

+0

Układ jest złożony, jest klasą faktury, która implementuje 'Printable', więc używam wielu różnych menedżerów layoutu,' SpringLayout', 'BorderLayout',' BoxLayout' i tak dalej ... Postaram się użyć Insets, dziękuję. – Jonas

14

Innym sposobem, aby dostać to, czego chcę, to:

  1. uzyskać aktualny Border swojego urządzenia
  2. jeżeli null , ustawić EmptyBorder dla komponentu
  3. jeśli nie null, stworzyć nowy CompoundBorder (z EmptyBorder i aktualnym Border z component) i ustawić go dla komponentu

W kodzie , który powinien wyglądać tak (przepraszam, że jej nie testowane):

Border current = component.getBorder(); 
Border empty = new EmptyBorder(top, left, bottom right); 
if (current == null) 
{ 
    component.setBorder(empty); 
} 
else 
{ 
    component.setBorder(new CompoundBorder(empty, current)); 
} 

Gdzie:

  • komponent to komponent Swing do , do którego chcesz dodać margines
  • górny, lewy, dolny, prawy to liczba pikseli w rozmiarze chcesz dodać około komponentu

Należy zauważyć, że metoda ta może mieć wpływ (rozmiar, wyrównanie) na kształt formy, w zależności od LayoutManager używasz. Ale myślę, że warto spróbować.

+0

Ta metoda tworzyła dla mnie nieprzejrzyste granice, a nie przezroczyste. To był problem. Użyłem zmodyfikowanej wersji: zamiast ustawiać ramkę na komponencie, utwórz nowy panel i ustaw dla niego granicę, a następnie dodaj komponent do tego panelu. Po wykonaniu tej czynności granica była przejrzysta zgodnie z oczekiwaniami. @jfpoilpret Czy mógłbyś zaktualizować swoją odpowiedź? – Loduwijk

Powiązane problemy