java - 为什么添加到框架中的第一个面板会消失?

标签 java swing jframe layout-manager border-layout

下面是将两个面板添加到框架的示例。只出现一个面板(第二个,红色面板)。

Disappearing Panel In Frame

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

import java.awt.Color;
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(getColoredPanel(Color.GREEN));
        f.add(getColoredPanel(Color.RED));

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

    private JPanel getColoredPanel(Color color) {
        JPanel p = new JPanel();
        p.setBackground(color);
        p.setBorder(new EmptyBorder(20, 150, 20, 150));
        return p;
    }

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

最佳答案

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

至于什么是更好的方法取决于用户界面的具体需求。

关于java - 为什么添加到框架中的第一个面板会消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361149/

相关文章:

java - 如何从您的 java 代码中删除 Lombok api

java - 当尝试编译 MongoDB Utilites 类时,我不断收到 "error package com.mongodb does not exist"

java - 如何通过 JList 中的索引编辑元素?

java - 未显示 JFrame 的内容

java - JMenu 在调整窗口大小之前不会出现

java - 如何在 java 中从上到下向我的框架添加 4 个面板?

java - 对象初始化 - 构造函数与类类型和方法访问的关系

java - Log4j 2 登录错误级别

java - 用于高亮异常图像像素的 Swing 组件

java - 将焦点从一个 JTree 节点转移到另一个