JPanel填充所有JFrame空间

我编写了这段代码,用于显示面板中的一些颜色:

import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; public class Palette { public static void main(String[] args) { JFrame frame = new JFrame("Panel"); palette.add(new Color(255, 0, 0)); palette.add(new Color(0, 255, 0)); palette.add(new Color(0, 0, 255)); int width = 100; int height = 250; int x = 0; for (Color color : palette) { JPanel panel = new JPanel(); panel.setSize(width, height); panel.setLocation(x, 750); panel.setBackground(new java.awt.Color(color.getColor())); frame.add(panel); x+=width; } frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(1000, 1000); frame.setVisible(true); } } 

两个第一个面板位于正确的位置并具有正确的尺寸。 但是最后一个用蓝色填充所有框架。 怎么了?

您必须使用适当的布局管理器。 默认情况下,JFrame具有BorderLayout

查看LayoutManagers的本教程:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

  1. 您尚未在框架上设置LayoutManager。 我不确定Swing中默认的LayoutManager是什么,但是当调用pack()时,LayoutManager可能只是按Z顺序堆叠组件。
  2. 您应该使用setPreferredSize(Dimension d),而不是setSize(int x,int y) – 我记得LayoutManagers更喜欢这个。