web-dev-qa-db-ja.com

フローレイアウトを使用したままJPanel内のパディングを削除するにはどうすればよいですか?

これが私のJavaアプリケーションGUIの、私が質問している部分です。

enter image description here

このGUIの構成要素は、デフォルトのFlowLayoutがLayoutManagerである青いJPanel(コンテナ)であり、2つのJPanelを含むBoxが含まれています(水平方向の間隔を削除するため、またはBoxの代わりにsetHgapsをゼロに使用することもできます)。 JLabel。

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

私の質問は、外側のJPanel(青いもの)とBoxの間の垂直方向のパディングをどのように取り除くのですか?

マージンとパディングの違いは? 「パディング=テキストから境界線までの要素の周囲(内部)のスペース」を読んだので、これがパディングであることを知っています。

これはコンポーネント間のギャップ(スペース)が原因であるため、これは機能しません。- MigLayoutでJPanelパディングを削除する方法は?

これを試しましたが、うまくいきませんでした。 JavaでのJPanelパディング

11

FlowLayoutギャップを設定 、つまり.

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

デフォルトのFlowLayoutには、5単位の水平方向と垂直方向のギャップがあります。この場合、BorderLayoutがパネルを水平方向に引き伸ばしているため、水平方向は重要ではありません。

または、新しいFlowLayoutでパネルを単純に初期化します。同じ結果になります。

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

編集:

「私はそれを試しましたが、うまくいきませんでした。」

私のために働く...

enter image description hereenter image description here

ギャップを設定する↑ギャップを設定しない↑

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

注:より良いヘルプを得るために、(私が行ったように)実行可能な例を常に投稿してください。あなたはそれが機能しないと言いますが、それは私にとっては常に機能します、それで私たちはあなたが何を間違っているのかをどのように知ることができますか?

17
Paul Samsotha