问题1:是关于ComboBox的,我想改变ComboBox选择后的背景颜色,该如何修改呢?(我指不是下拉List里的背景色,而是选择完后,的深灰色部分,图片中打勾的部分。)
问题2:为什么所有继承Swing组件的类都必须包含一个:
private static final long serialVersionUID = 1L; 或者
private static final long serialVersionUID = 3188646684090670830L;
Eclipse才不会有警告的标志,如果不加它有影响吗?(一般是加还是不加呢?)
问题2:为什么所有继承Swing组件的类都必须包含一个:
private static final long serialVersionUID = 1L; 或者
private static final long serialVersionUID = 3188646684090670830L;
Eclipse才不会有警告的标志,如果不加它有影响吗?(一般是加还是不加呢?)
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
有两种生成方式:
一个是默认的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,可避开不兼容性问题。
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;
}}