Java BoxLayout在底部显示白线

Java BoxLayout在底部显示白线,java,swing,grid-layout,gridbaglayout,boxlayout,Java,Swing,Grid Layout,Gridbaglayout,Boxlayout,我试着在垂直和水平方向上画多条线来填充整个框架。我用一个GridBagLayout和一个GridBagLayout试过了,现在用BoxLayout试过了,问题是一样的!通过调整大小显示白线 我不知道我应该使用哪个布局管理器,因为所有人都有相同的问题!我想要一个响应性强的布局,所以我需要使用LayoutManager,无法修复元素。有人能帮我吗 Container parentPane = frame.getContentPane(); JPanel parentPanel = n

我试着在垂直和水平方向上画多条线来填充整个框架。我用一个GridBagLayout和一个GridBagLayout试过了,现在用BoxLayout试过了,问题是一样的!通过调整大小显示白线

我不知道我应该使用哪个布局管理器,因为所有人都有相同的问题!我想要一个响应性强的布局,所以我需要使用LayoutManager,无法修复元素。有人能帮我吗

    Container parentPane = frame.getContentPane();
    JPanel parentPanel = new JPanel();
    parentPane.add(parentPanel);        

    parentPanel.setLayout( new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));   
    JPanel[] parentPanelFields = new JPanel[6];

        for(int i = 0; i < 6; i++) {
            parentPanelFields[i] = new JPanel();        
            parentPanelFields[i].setBackground(Color.RED);
            if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));

            parentPanel.add (parentPanelFields[i]);

        }

像其他布局经理一样使用RelativeLayout

如果您有6个面板添加到一个框架中,并且框架已打包,则每个面板将按预期显示

如果将帧大小增加5个像素,则没有足够的空间为每个面板提供额外像素,因此底部有5个额外像素,因为布局管理器不知道如何将这些额外像素分配给组件

如果将第1帧再扩展1个像素,则每个面板将接收额外的像素,空间将消失

你可以试着用这个。此布局将根据为布局管理器设置的属性,将这些额外像素分配给1个或多个组件

同样,使用
相对布局
也无需为每个组件添加边框。您只需设置“间隙属性”,使每个组件之间保留1个像素。然后,父面板的背景将显示出来

编辑:

基本准则是:

RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true ); // to fill horizontal width
rl.setGap( 1 ); // so you don't need the border
somePanel.setLayout( rl );
然后在循环中:

somePanel.add(someComponent, new Float(1.0f));

听起来像是有边框的。我不使用任何边框。均匀宽度。顺序(0,0,0,0)白线显示。。。有什么想法吗?你在哪里使用了
.setboorder()
?你有没有试过把它用在框架、面板和其他东西上?这可能与布局本身有关,也可能是发布了一个适当的说明问题的帖子。没有适当的代码,我们只能猜测。话虽如此,我猜想您是在人为地设置大小或首选大小,而不允许GUI组件适当地调整自身大小。请不要强迫我们猜测——发表你的文章,我们可以运行和评估(不是链接——在这里用你的问题编写代码)。非常感谢你的回答!答案对我来说很有意义。。。但我的问题是,我在GUI编程方面不是很好,而且我在web上也没有发现太多关于“relativeLayout”的东西。你能帮我举个小例子吗?相对布局是我添加到项目中的外部类吗?我希望你能帮我更多…@Waldi,是的,这是一个外部类,你需要从我证明给你的链接下载。再次:非常感谢!你解决了我三天的问题!通过您的小示例,我了解了相对布局的用法。真的,谢谢你!是否存在评级系统?我想喜欢你的个人资料…但我还有一个问题:如何在边框布局中使用此相对布局?在我的例子中,我希望在位于BorderLayout.CENTER位置的面板内部使用此相对布局。如果我把面板放在里面,相对的布局就不起作用了。。。你能再帮我一个忙吗?当然,你可以使用RelativeLayout将面板添加到使用BorderLayout的面板。这正是您在演示程序中遇到的情况。正如我在回答中所建议的,只需将BoxLayout更改为RelativeLayout。问题不在于RelativeLayout,而在于您的应用程序代码。如果希望使用RelativeLayout自动垂直调整面板大小,则父面板也必须垂直调整大小,这是将面板添加到BorderLayout中心的一个很好的理由,因为该面板将垂直和水平调整大小。
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true ); // to fill horizontal width
rl.setGap( 1 ); // so you don't need the border
somePanel.setLayout( rl );
somePanel.add(someComponent, new Float(1.0f));