渲染器:   
 class CheckBoxRenderer implements TableCellRenderer{
        private NCheckBox checkBox;
        private NLabel label;
        public CheckBoxRenderer(NCheckBox checkBox) {
            this.checkBox = checkBox;
        }
        public CheckBoxRenderer(NCheckBox checkBox, NLabel label){
            this.checkBox = checkBox;
            this.label = label;
        }
        /**
         * getTableCellRendererComponent
         *
         * @param table JTable
         * @param value Object
         * @param isSelected boolean
         * @param hasFocus boolean
         * @param row int
         * @param column int
         * @return Component
         */
        public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int column) {
            if(column == 0){
//                checkBox.setSelected(true);
                checkBox.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e) {
                         checkBox.setSelected(true);
                        logger.info("发生事件");
                    }                });
                if(isSelected){
                    checkBox.setSelected(true);
                }else{
                    checkBox.setSelected(false);
                }
                return checkBox;
            }else{
                label.setText(value.toString());
                label.setBorder(BorderFactory.createEtchedBorder());
                return label;
            }        }    }程序中调用:JTableHeader tableHeader = table.getTableHeader();
tableHeader.setDefaultRenderer(new CheckBoxRenderer(new NCheckBox("全选"), new NLabel()));出现的复选框不可选,不响应鼠标事件。
请问如何解决,谢谢

解决方案 »

  1.   

    TO:carlkkx
    请问editorR如何加,好像不可以往一个JTableHeader里加editor,往table里editor是加一列。
    请详细指教...
      

  2.   

    出现的复选框不可选,不响应鼠标事件。
    _______________________________________
    但你可以监听JTableHeader的鼠标事件,JTableHeader也继承JComponent.
    然后利用JTableHeader的columnAtPoint(Point point)来确定这个点击在那一列。
    然后repaint()一下!但CheckBoxRenderer要重新实现一下,让他跟踪记录哪些列被选中,哪些没有。你可以让CheckBoxRenderer来实现鼠标监听器。不过这个方法还是有一个问题,鼠标点击只能精确到列而不是CheckBox的小方框。
    不知道这是不是一个问题!