//颜色盒的定义
class Colorbox extends JPanel{
  private Hashtable hTable;
  private Color[] colorArray;
  private  Color displayColor;
  private JPanel paneBox ;
  private Border selectedBorder;
  private Border unSelectedBorder;
  private Border activeSelectedB;
  public Colorbox ()
  {
  /**
     *@定义方格的颜色
  */
   colorArray = new Color[]{ Color.black,Color.gray,new Color(128,0,0),new Color(128,128,0),new Color(0,128,0),
                             new Color(0,128,128),new Color(0,0,128),new Color(128,0,128),new Color(128,128,64),
                             new Color(0,64,64),new Color(0,128,255),new Color(0,64,128),new Color(128,0,255), 
                             new Color(128,64,0),Color.white,Color.lightGray,Color.red,Color.yellow,Color.green,
                             Color.cyan,Color.blue,Color.magenta,new Color(255,255,128),new Color(0,255,128),
                             new Color(128,255,255),new Color(128,128,255),new Color(255,0,128),new Color(255,128,64)};
   hTable = new Hashtable();//~. creat a Hashtable;
    paneBox = new JPanel();//放置24个方格的面板
    paneBox.setLayout(new GridLayout(2,14));
    paneBox.setBorder(new EmptyBorder(4,4,4,4));//设置放置方格面板的面板的边框
    selectedBorder = new CompoundBorder( new MatteBorder(2,2,2,2,Color.red),
                                         new MatteBorder(0,0,0,0,getBackground()));
    unSelectedBorder = new CompoundBorder(new MatteBorder(0,0,0,0,getBackground()),
                                          new BevelBorder(BevelBorder.LOWERED,Color.white,Color.gray));
    activeSelectedB = new CompoundBorder(new MatteBorder(0,0,0,0,Color.blue),
                                         new MatteBorder(0,0,0,0,getBackground()));
    for (int i = 0;i<colorArray.length;i++)
    {
       colorElem colorelem = new colorElem(colorArray[i]);
       paneBox.add(colorelem);
       hTable.put(colorArray[i],colorelem);    
    }
   
    add(new colorDisplay());
    add(paneBox); 
  }

解决方案 »

  1.   

    /**~~~~~~`
        *@定义每个方格
      */
      private class colorElem extends JPanel implements MouseListener
      {
         private Color color_value ;
         private boolean color_selected;
         public colorElem() {};
         public colorElem ( Color c )
         {
           color_value = c ;
           setBackground(c);
           String msc = "R"+c.getRed()+",G"+c.getGreen()+",B"+c.getBlue();
           setToolTipText(msc);
           addMouseListener(this);
         }
         public Dimension getPreferredSize()
         {
           return new Dimension(17,17);
         }
         public Dimension getMaximunSize()
         { return getPreferredSize();}
         public Dimension getMinimunSize()
         { return getPreferredSize();}
         public void setSelected(boolean selected)
         {
           color_selected = selected;
           if(color_selected)
           setBorder(selectedBorder);
           else
           setBorder(unSelectedBorder);
         }
         public void mouseClicked(MouseEvent e){}
         public void mousePressed(MouseEvent e){}
         public void mouseReleased(MouseEvent e)
         {
           displayColor = getBackground();
         }
         public void mouseEntered(MouseEvent e)
         {
           setBorder(activeSelectedB);
         }
         public void mouseExited(MouseEvent e)
         {
           setBorder(color_selected?selectedBorder:unSelectedBorder);
         }
      }
       private class colorDisplay extends JPanel
      {
        private JPanel display;
        public colorDisplay()
        {
           setBorder(BorderFactory.createLoweredBevelBorder());
           display = new colorElem();
           display.setBackground(displayColor);
           display.setBorder(new CompoundBorder(new MatteBorder(0,0,0,0,getBackground()),
                                              new BevelBorder(BevelBorder.LOWERED,Color.white,Color.gray)));
           add(display,BorderLayout.CENTER);
        }
        public Dimension getPreferredSize()
        { return new Dimension(34,34);}//设置大小
      }
    }
      

  2.   

    准许用JB的XYLayout吗?
    你说的左端,中间,应该是中间的左边?
      

  3.   

    用XYLayout布局管理器,可以让你随意摆放控件位置,并且不会随窗口的改变而改变。
      

  4.   

    但是用GridLayout的话
    则空件会随着窗口的最大化,它的宽度而变很大;
    我的意思是把控件放在一个固定的位置,而且它的大小
    也不会随着窗口的改变而改变.