2012-01-18 78 views
2

我写这篇文章的代码从面板显示某些颜色集:在正确的地方和右尺寸的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); 
    } 

} 

两个第一板。但最后一个以蓝色填充所有框架。怎么了?

+0

你必须使用适当的布局管理器。 JFrame默认有一个BorderLayout。 – 2012-01-18 17:17:45

+1

@Dmytro,什么是“调色板”? – mre 2012-01-18 17:18:18

+1

@mre我不得不猜测它是一个列表 2012-01-18 17:19:00

回答

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

1)'JFrame'默认使用'BorderLayout',并且2)在'JFrame'实例上调用'setSize'与setPreferredSize'做同样的事情。 – mre 2012-01-18 17:17:52

+0

@mre谢谢 - 自从我上一次与Swing合作以来已经有数年了。 – mcfinnigan 2012-01-18 17:19:04