A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯林林 初级黑马   /  2012-8-19 22:38  /  2001 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎样用ListCellRenderer在JList中添加想要的组件,看了API,不是很懂,向高手请教。。。

2 个回复

倒序浏览
经过多方查询,自己知道了,在此自己回答,希望跟我一起不懂的这个问题的人能够了解
例:将列表框数据项显示为复选框
package restaurant.order;
import java.awt.*;

import javax.swing.*;
public class Jlist {

        /**
         * @param args
         */
       
        JFrame f=new JFrame();
        JList l;
        JPanel p=new JPanel();
        public Jlist(){
                Object[] o={"a","b","c","d"};
                l=new JList(o);
                l.setSize(30, 25);
                l.setCellRenderer(new CheckBoxListCellRenderer());//设置列表框单元渲染器
                /*
                 * 内部类CheckBoxListCellRenderer声明实现列表框单元渲染器接口,将列表框各
                 * 数据项表现为复选框组件,列表框的每个数据项都要执行该对象的
                 * getListCellRendererComponent()方法用于设置每个复选框的行为和状态,方法的参数传递列表框当前数据项的状态。
                 * */
                f.getContentPane().setLayout(new FlowLayout());
                f.getContentPane().add(new JScrollPane(l));
                f.setSize(200,300);
                f.setVisible(true);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
       
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Jlist jl=new Jlist();
        }
/*
实现列表框单元渲染器接口ListCellRenderer:
ListCellRenderer声明如下:
    Public interface ListCellRenderer{
       Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus)
}
其中,getListCellRendererComponent()的list参数指定当前列表框组件;value指定列表框当前数据项值,即list.getModel().getElementAt(index)值;index指定当前数据项序号:isSelected指定数据项是否被选中;cellHastFocus指定数据项是否拥有焦点。该方法返回已配置用于显示指定值的组件 ,再调用该组件的paint()方法在列表框中“画出”组件,显示组件本身的形象。
*/
        public class CheckBoxListCellRenderer extends JCheckBox implements ListCellRenderer{

                @Override
                public Component getListCellRendererComponent(JList list, Object value,
                                int index, boolean isSelected, boolean cellHasFocus) {
                        // TODO Auto-generated method stub
                        setText(value.toString());  //指定列表框当前数据项值
                        setSelected(isSelected);                //当前数据项选中状态
                        return this;
                }
               
        }
}
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马