黑马程序员技术交流社区

标题: 如何在JList中添加想要的组件 [打印本页]

作者: 侯林林    时间: 2012-8-19 22:38
标题: 如何在JList中添加想要的组件
怎样用ListCellRenderer在JList中添加想要的组件,看了API,不是很懂,向高手请教。。。
作者: 侯林林    时间: 2012-8-23 19:43
经过多方查询,自己知道了,在此自己回答,希望跟我一起不懂的这个问题的人能够了解
例:将列表框数据项显示为复选框
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;
                }
               
        }
}

作者: 侯林林    时间: 2012-8-26 13:35
问题已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2