翻了翻JCheckBox的相关源代码,不太明白icon的变化机制。
如果用new JCheckBox(),defaultIcon值为空,那么显示的那个框是哪里设置的
还有怎么设置getDisableIcon第二个问题:如果有两个组件并列排放,如何将前一个设置为不可见,并且不占据空间:-)即第二个组件从原来第一个组件的位置开始摆放
不知道有没有表达清楚,请大家帮忙。学习swing中……尽快结贴……

解决方案 »

  1.   

    针对第一个问题自己做了个东西,大家有空看一眼public class ColorCheckBox extends JCheckBox {
    private Color color;

    public ColorCheckBox(String name){
    super(name);
    }
    private MetalCheckBoxIcon defaultIcon = new MetalCheckBoxIcon() {
    public void paintIcon(Component c, Graphics g, int x, int y) {
    if(color != null){
    g.setColor(color);
    JCheckBox cb = (JCheckBox)c;
     if(cb.isBorderPaintedFlat()) {
      g.fillRect(x+2, y+1, getControlSize()-2, getControlSize()-2);
     }else{
      g.fillRect(x, y, getControlSize()-1, getControlSize()-1);
     }
    }

    super.paintIcon(c, g, x, y);
    }
    }; /**
     * @return 返回 color。
     */
    public Color getColor() {
    return color;
    }
    /**
     * @param color 要设置的 color。
     */
    public void setColor(Color color) {
    this.color = color;
    }

    /* (非 Javadoc)
     * @see javax.swing.AbstractButton#getIcon()
     */
    public Icon getIcon() {
    return defaultIcon;
    }
    public static void main(String[] args) {
    JFrame frame = new JFrame();

    ColorCheckBox check = new ColorCheckBox("我靠");
    check.setOpaque(false);
    check.setColor(Color.LIGHT_GRAY);
    frame.getContentPane().setLayout(new FlowLayout());
    frame.getContentPane().add(check);
    frame.getContentPane().setBackground(Color.WHITE);

    frame.setSize(200,200);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
      

  2.   

    1.ICON为空的话,就是个空框,没有什么地方设置,就像一个JLable未设置Icon的样子
      有设置setDisabledIcon()的方法
    2.设置FlowLayout,然后放置控件