Como remover o preenchimento entre no JPanel ainda usando um layout de stream?

Aqui está a parte da minha GUI do aplicativo java sobre a qual tenho uma pergunta.

insira a descrição da imagem aqui

O que essa GUI consiste é um JPanel azul (container) com FlowLayout padrão como LayoutManager que contém um Box que contém dois JPanels (para remover o espaçamento horizontal ou eu poderia ter usado setHgaps para zero para esse problema em vez de um Box) que contém um JLabel

Aqui está o meu código para criar essa parte da 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); } 

Minha pergunta é como eu iria me livrar do preenchimento vertical entre o JPanel externo (o azul) e a checkbox?

Eu sei que isso é preenchimento porque eu li sobre diferença entre margem e preenchimento? que “preenchimento = espaço ao redor (dentro) do elemento de texto para borda”.

Isso não funcionaria porque isso tem que devido com lacunas (espaço) entre os componentes. – Como remover o preenchimento de JPanel no MigLayout?

Eu tentei isso, mas também não funcionou. JPanel Padding em Java

Você pode apenas definir as lacunas no FlowLayout , ou seja,

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

O FlowLayout padrão tem um intervalo horizontal e vertical de 5 unidades. Horizontal não importa neste caso, pois o BorderLayout está esticando o painel horizontalmente.

Ou simplesmente inicialize o painel com um novo FlowLayout . Será o mesmo resultado.

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

Editar:

“Eu tentei isso, não funcionou ..”

Funciona para mim…

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Definindo o intervalo ↑ Não definindo o intervalo ↑

 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(); } }); } } 

Nota: Sempre poste um exemplo executável (como eu fiz) para melhor ajuda. Você diz que não funciona, mas sempre funciona para mim, então como saberíamos o que você está fazendo errado sem algum código que funcione e demonstre o problema?