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