自己扩展一个CellRenderer,如:VCellRenderer extends DefaultTableCellRenderer,然后覆盖里面的方法 getTableCellRendererComponent,里面直接返回你的CellRenderer,不要判断isSelected,这样就可以了

解决方案 »

  1.   

    同意 popufig(失散的影子) ( ) 信誉:100 说的
      

  2.   

    不行诶,我把这个方法(getTableCellRendererComponent)进行重载,结果是没有任何反应。感觉不再这个方法里面诶。
      

  3.   

    回复人: yiqiangyang(大海能够包容一切) ( ) 信誉:100  2005-01-12 15:32:00  得分: 0  
     
     
       不行诶,我把这个方法(getTableCellRendererComponent)进行重载,结果是没有任何反应。感觉不再这个方法里面诶。
      
     
    不可能不出效果
    看看你的CellRenderer(comboBox)实例化了没有!!
      

  4.   

    我的代码
    public void setComboBoxEditor(JTable table, TableColumn columnClass,
                                   ) {

        JComboBox comboBox = new JComboBox(); 

        comboBox.setEditable(true);
        columnClass.setCellEditor(new DefaultCellEditor(comboBox));
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
    //重载方法getTableCellRendererComponent()
    };
        renderer.setToolTipText("Click for combo box");
        columnClass.setCellRenderer(renderer);  }
    请问这样有问题吗?
    谢谢
      

  5.   

    不知道你重载的方法是怎么写的,你可以参考下面的写法:public class VolumeRenderer extends JSlider implements TableCellRenderer {  public VolumeRenderer() {
        super(SwingConstants.HORIZONTAL);
        // set a starting size...some 1.2/1.3 systems need this
        setSize(115,15);
      }  public Component getTableCellRendererComponent(JTable table, Object value,
                                                     boolean isSelected,
                                                     boolean hasFocus,
                                                     int row,int column) {    if (value == null) {
          return this;
        }
        if (value instanceof Volume) {
          setValue(((Volume)value).getVolume());
        }
        else {
          setValue(0);
        }
        return this;
      }
    }这个例子的渲染器是一个JSlider,其原理和你想要的JComboBox是一样的。你要注意上面的getTableCellRendererComponent方法中没有对isSelected和hasFocus做出判断,是直接返回了Component.
    可以这么使用:JTable jt = new JTable();
    jt.setDefaultRenderer(Volume.class, new VolumeRenderer());