JPanel填充所有JFrame空间

时间:2012-01-18 17:09:56

标签: java swing jframe jpanel

我已编写此代码以显示面板中的一些颜色:

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);
    }

}

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

2 个答案:

答案 0 :(得分:5)

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

查看LayoutManagers的本教程:

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

答案 1 :(得分:1)

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