问题1:是关于ComboBox的,我想改变ComboBox选择后的背景颜色,该如何修改呢?(我指不是下拉List里的背景色,而是选择完后,的深灰色部分,图片中打勾的部分。)
问题2:为什么所有继承Swing组件的类都必须包含一个: 
private static final long serialVersionUID = 1L; 或者
private static final long serialVersionUID = 3188646684090670830L;
Eclipse才不会有警告的标志,如果不加它有影响吗?(一般是加还是不加呢?)

解决方案 »

  1.   

    并不只是继承Swing的类才有serialVersionUID作用: 
           序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
    有两种生成方式:
           一个是默认的1L,比如:private static final long serialVersionUID = 1L;
           一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:
           private static final   long     serialVersionUID = xxxxL;当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个
         提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会
         自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也
          可以把它关掉的,设置如下: 
            Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>
            Potential programming problems 
            将Serializable class without serialVersionUID的warning改成ignore即可。如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。 
      

  2.   

    问题一的话,可以写一个renderer来处理,具体代码实现为:
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.plaf.basic.BasicComboBoxEditor;
    import javax.swing.plaf.basic.BasicComboBoxRenderer;public class MyChessFrame extends JFrame
    {
    public MyChessFrame()
    {
    initUI();
    this.setTitle("标题");
    this.setSize(300, 200);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true); } private void initUI()
    {
    JComboBox box = new JComboBox();
    box.addItem("green");
    box.addItem("red");
    box.addItem("blue");
    box.setRenderer(new ListRenderer(box));
    this.getContentPane().setLayout(new FlowLayout());
    this.getContentPane().add(box);
    } public static void main(String[] args)
    {
    new MyChessFrame();
    }}class ListEditer extends BasicComboBoxEditor
    {}class ListRenderer extends BasicComboBoxRenderer
    {
    JComboBox jf; public ListRenderer(JComboBox jf)
    {
    this.jf = jf;
    } @Override
    public Component getListCellRendererComponent(JList list, Object value,
    int index, boolean isSelected, boolean cellHasFocus)
    {
    Color bgColor;
    String cellValue = value.toString();
    if (cellValue.equals("green"))
    {
    bgColor = Color.green;
    } else if (cellValue.equals("red"))
    {
    bgColor = Color.red;
    } else
    {
    bgColor = Color.blue;
    }
    setText(value.toString());
    setBackground(bgColor);
    list.setSelectionBackground(bgColor);
    return this;
    }}