编程语言
首页 > 编程语言> > java – 为什么添加到框架的第一个面板消失了?

java – 为什么添加到框架的第一个面板消失了?

作者:互联网

下面是将两个面板添加到框架的示例.仅出现一个面板(第2个红色面板).

为什么第一个面板消失了?

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

public class DisappearingPanelInFrame {

    DisappearingPanelInFrame() {
        JFrame f = new JFrame(this.getClass().getSimpleName());
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        f.add(new ColoredPanel(Color.GREEN));
        f.add(new ColoredPanel(Color.RED));

        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                new DisappearingPanelInFrame();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

class ColoredPanel extends JPanel {

    ColoredPanel(Color color) {
        setBackground(color);
        setBorder(new EmptyBorder(20, 150, 20, 150));
    }
}

解决方法:

> JFrame的默认布局(或者更具体地说,在这种情况下,框架的内容窗格)是BorderLayout.
>在没有约束的情况下向BordeLayout添加组件时,Swing API会将组件放入CENTER中.
> BorderLayout可以在5个布局约束中的每一个中只包含一个组件.
>当第二个组件添加到BorderLayout的相同(在本例中为CENTER)约束时,此Java实现将显示添加的最后一个组件.

至于什么是更好的方法取决于用户界面的特定需求.

标签:border-layout,java,swing,jframe,layout-manager
来源: https://codeday.me/bug/20190725/1527872.html