将List的item用icon+文本的方式显示:
public class TJList extends JApplet{
private static class Resource{
Icon icon=new ImageIcon(Resource.class.getResource ("/hezof/swing/japplet/icon.gif"));
}
private static class MyListModel extends AbstractListModel{
private String[] items={"A",.....};
public int getSize(){
return items.length;
}
public Object getElementAt(int index){
return items[index];
}
}
private static class MyListCellRenderer extends JLabel implements ListCellRenderer{
public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean hasCellFocus){
if(value !=null){
setText(value.toString());
}
setIcon(Resource.icon);
setBackground(isSelected?list.getSelectionBackground ():list.getBackground());
setForeground(isSelected? list.getSelectionForeground:list.getForegrond());
return this;
}
}
public void init(){
Container content=getContentPane();
content.setLayout(new GridLayout(1,1));
JList list=new JList(new MyListModel());
list.setCellRenderer(new MyListCellRenderer());
content.add(list);
}
} 这个设想被这个现实彻底破灭了:
JLabel.setBackground(Color)不生效.下面的测试也说明标签背景色不会变的,郁闷哦....tell me why?
public class JTest extends JApplet{
public void init(){
JLabel lbl=new JLabel("test");
lbl.setBackground(Color.BLUE);
getContentPane().add(lbl);
}
public static void main(String[] args){
JFrame frm=new JFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(400,300);
JTest test=new JTest();
test.init();
frm.getContentPane().add(test);
frm.setVisible(true);
}
}
public class TJList extends JApplet{
private static class Resource{
Icon icon=new ImageIcon(Resource.class.getResource ("/hezof/swing/japplet/icon.gif"));
}
private static class MyListModel extends AbstractListModel{
private String[] items={"A",.....};
public int getSize(){
return items.length;
}
public Object getElementAt(int index){
return items[index];
}
}
private static class MyListCellRenderer extends JLabel implements ListCellRenderer{
public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean hasCellFocus){
if(value !=null){
setText(value.toString());
}
setIcon(Resource.icon);
setBackground(isSelected?list.getSelectionBackground ():list.getBackground());
setForeground(isSelected? list.getSelectionForeground:list.getForegrond());
return this;
}
}
public void init(){
Container content=getContentPane();
content.setLayout(new GridLayout(1,1));
JList list=new JList(new MyListModel());
list.setCellRenderer(new MyListCellRenderer());
content.add(list);
}
} 这个设想被这个现实彻底破灭了:
JLabel.setBackground(Color)不生效.下面的测试也说明标签背景色不会变的,郁闷哦....tell me why?
public class JTest extends JApplet{
public void init(){
JLabel lbl=new JLabel("test");
lbl.setBackground(Color.BLUE);
getContentPane().add(lbl);
}
public static void main(String[] args){
JFrame frm=new JFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(400,300);
JTest test=new JTest();
test.init();
frm.getContentPane().add(test);
frm.setVisible(true);
}
}
不过AWT的LABEL却可以正常显示背景颜色JLabel的setBackground是继承自JComponent的
同样是继承自JComponent的其它控件使用setBackground却没有问题JComponent间接继承Component,但重写了setBackground我试着继承JLabel,然后重写setBackground方法(代码用的Component的setBackground方法),还是不行.JDK 1.5.08不知道JDK1.6的兄弟是否这种情况?
* 原因在于JComponent的setOpaque(boolean)默认情况下是false.
* 背景透明自然无法显示,笨鸟~
*/
public class JTest extends JApplet{
public void init(){
JLabel lbl=new JLabel("test");
lbl.setOpaque(true);//here....
lbl.setBackground(Color.BLUE);
getContentPane().add(lbl);
}
public static void main(String[] args){
JFrame frm=new JFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(400,300);
JTest test=new JTest();
test.init();
frm.getContentPane().add(test);
frm.setVisible(true);
}
}
请教一下awt和swing的区别大吗??为什么都用swing去了?