1

我一直在使用WindowBuilder Pro for Java Swing 布局,遇到了一些奇怪的行为,我最终能够将其简化为 SSCCE。考虑下面的源代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class WBPTest2 {
    private JFrame frame;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    WBPTest2 window = new WBPTest2();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public WBPTest2() {
        initialize();
    }
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBackground(Color.RED);
        frame.getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        JPanel panel_1 = new JPanel();
        panel_1.setBackground(Color.GREEN);
        panel_1.setMaximumSize(new Dimension(32767, 100));
        panel.add(panel_1);
        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

        JPanel panel_2 = new JPanel();
        panel_2.setBackground(Color.BLUE);
        panel_2.setMaximumSize(new Dimension(32767, 100));
        panel.add(panel_2);
        panel_2.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    }
}

它提供了以下布局:

在此处输入图像描述

无论出于何种原因,panel_1绿色的 ,都会向右浮动。玩弄了代码中的一些参数,我只能找到两种方法彻底杀死绿色面板左侧的缝隙:

  • 将构造函数中的hgapand更改为 0。vgappanel_2

或者

  • minimumSize将of更改panel_2为 (0,0)。

做其中任何一个,我们得到这个:

在此处输入图像描述

现在,问题是,到底为什么inminimumSize或in与阻止填充到其父对象的左侧hgap有任何关系?如果我碰巧想要一个大于零和大于零的我的 in怎么办?那么我将如何消除in左侧的间隙?FlowLayoutpanel_2panel_1minimumSizehgapFlowLayoutpanel_2BoxLayoutpanel_1

无论我做什么panel_1,我都不能让它填满其父容器的整个宽度(除非我panel_2按照上面的描述进行编辑)。具有讽刺意味的是,如果我将 for 设置alignmentXpanel_1RIGHT_ALIGNMENT它实际上会向左浮动。但差距仍然存在(就在右边)。当我填充panel_1内容并增加它的大小时,它右侧的间隙变得越来越小,但从未完全消失,令人沮丧。

这不仅仅发生在panel_2is a FlowLayout... 它还发生在JScrollPane和许多其他类型... 通常没有hgap参数的类型,这意味着修复左侧间隙的唯一方法panel_1是更改新容器minimumSize为 0,这又显得愚蠢且不相关,最重要的是可能不是我的设计意图。

4

1 回答 1

3

在面板 1 和 2 上设置 alignmentX 并填充屏幕。

似乎两个不同的布局管理器导致面板设置不同的对齐默认值。

于 2013-01-17T03:47:10.017 回答