2014-12-07 25 views
7

Oto część mojego GUI aplikacji java, o której mam pytanie.Jak usunąć wypełnienie pomiędzy JPanel przy użyciu układu przepływu?

enter image description here

Co to GUI składa jest niebieski JPanel (kontener) z domyślnej FlowLayout jako LayoutManager który zawiera pole, które zawiera dwa JPanels (aby usunąć odstępy poziome lub ja mogła wykorzystać setHgaps do zera dla tej sprawy zamiast Box), z których każdy zawiera JLabel.

Oto mój kod do tworzenia tej części GUI.

private void setupSouth() { 

    final JPanel southPanel = new JPanel(); 
    southPanel.setBackground(Color.BLUE); 

    final JPanel innerPanel1 = new JPanel(); 
    innerPanel1.setBackground(Color.ORANGE); 
    innerPanel1.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); 
    innerPanel1.add(new JLabel("Good")); 

    final JPanel innerPanel2 = new JPanel(); 
    innerPanel2.setBackground(Color.RED); 
    innerPanel2.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT)); 
    innerPanel2.add(new JLabel("Luck!")); 

    final Box southBox = new Box(BoxLayout.LINE_AXIS); 
    southBox.add(innerPanel1); 
    southBox.add(innerPanel2); 

    myFrame.add(southPanel, BorderLayout.SOUTH); 
} 

Moje pytanie brzmi: jak pozbyć się pionowej wyściółki między zewnętrznym JPanel (niebieski) i Box?

Wiem, że to dopełnienie, ponieważ przeczytałem na Difference between margin and padding?, że "dopełnienie = spacja wokół (wewnątrz) elementu z tekstu na obramowanie."

To nie będzie działać, bo to musi ze względu ze szczelinami (spacji) między components.- How to remove JPanel padding in MigLayout?

próbowałem tego, ale to nie działa albo. JPanel Padding in Java

+0

Twój kod jest niecałkowity.Nigdy nie dodajesz SouthBox do panelu ani nie dodajesz swoich wewnętrznych paneli do panelu południowego –

Odpowiedz

11

można po prostu set the gaps w FlowLayout, tj

FlowLayout layout = (FlowLayout)southPanel.getLayout(); 
layout.setVgap(0); 

Domyślna FlowLayout posiada 5-jednostkowy szczelinę poziomą i pionową. Poziomy nie ma znaczenia w tym przypadku, ponieważ BorderLayout rozciąga panel w poziomie.

Albo po prostu zainicjuj panel za pomocą nowego FlowLayout. To będzie ten sam rezultat.

new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 

Edit:

"Próbowałem, że nie działa .."

pracuje dla mnie ...

enter image description here       enter image description here

        Ustawianie lukę ↑                         Nie ustalania różnic ↑

import java.awt.*; 
import javax.swing.*; 

public class Test { 

    public void init() { 
     final JPanel southPanel = new JPanel(); 
     FlowLayout layout = (FlowLayout)southPanel.getLayout(); 
     layout.setVgap(0); 
     southPanel.setBackground(Color.BLUE); 

     final JPanel innerPanel1 = new JPanel(); 
     innerPanel1.setBackground(Color.ORANGE); 
     innerPanel1.add(new JLabel("Good")); 

     final JPanel innerPanel2 = new JPanel(); 
     innerPanel2.setBackground(Color.RED); 
     innerPanel2.add(new JLabel("Luck!")); 

     final Box southBox = new Box(BoxLayout.LINE_AXIS); 
     southBox.add(innerPanel1); 
     southBox.add(innerPanel2); 

     southPanel.add(southBox); // <=== You're also missing this 

     JFrame myFrame = new JFrame(); 
     JPanel center = new JPanel(); 
     center.setBackground(Color.yellow); 
     myFrame.add(center); 
     myFrame.add(southPanel, BorderLayout.SOUTH); 
     myFrame.setSize(150, 100); 
     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myFrame.setLocationByPlatform(true); 
     myFrame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new Test().init(); 
      } 
     }); 
    } 
} 

Uwaga: Zawsze umieścić runnable przykład (jak ja zrobiłem) do lepszego Wsparcie. Mówisz, że to nie działa, ale zawsze działa dla mnie, więc skąd byśmy wiedzieli, co robisz źle, bez kodu, który uruchomi i zademonstruje problem?

+0

Próbowałem tego, nie działało, ponieważ przerwy między komponentami – committedandroider

+0

Proszę napisać działający przykład demonstrujący ten problem –

Powiązane problemy