sorry , it is JTable, not JTble

解决方案 »

  1.   

    通过cellrender来实现。用render可以实现任何你想绘制的东西。
      

  2.   

    谁有代码给谁分,
    在google里搜cellrender,居然只有一条记录晕!
      

  3.   

    不只是要renderer,没有editor你怎么反映变化?public class TableCellCheckBoxEditor extends JCheckBox implements TableCellEditor{
      Object oldValue;
      Vector cellEditorListeners = new Vector();
      int rowId;
      boolean editable = true;  public TableCellCheckBoxEditor() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }  }   public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
       /**@todo: Implement this javax.swing.table.TableCellRenderer method*/
        if(value == null) value = "0";
        oldValue = value;
        rowId = row;
        this.editable = table.isCellEditable(row,column);
        if(value.equals("0"))
          this.setSelected(false);
        else
          this.setSelected(true);    setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
        setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
        this.setVisible(true);
        return this;
      }
      public Object getCellEditorValue() {
        if(this.isSelected()) return "1";
        else return "0";
      }  public boolean isCellEditable(EventObject anEvent) {
        return editable;
      }
      public boolean shouldSelectCell(EventObject anEvent) {
        return true;
      }
      public boolean stopCellEditing() {
        if(cellEditorListeners.size()>0) {
          for(int i=0;i<cellEditorListeners.size();i++)
          ((CellEditorListener)cellEditorListeners.elementAt(i)).editingStopped(new ChangeEvent(this));;
        }
        return true;
      }
      public void cancelCellEditing() {
        if(oldValue.equals("0"))
          this.setSelected(false);
        else
          this.setSelected(true);
        if(cellEditorListeners.size()>0) {
          for(int i=0;i<cellEditorListeners.size();i++)
          ((CellEditorListener)cellEditorListeners.elementAt(i)).editingCanceled(new ChangeEvent(this));
        }
      }
      public void addCellEditorListener(CellEditorListener l) {
        this.cellEditorListeners.addElement(l);
      }
      public void removeCellEditorListener(CellEditorListener l) {
        this.cellEditorListeners.removeElement(l);
      }
      private void jbInit() throws Exception {
        this.addFocusListener(new TableCellCheckBoxEditor_this_focusAdapter(this));  }  void this_focusLost(FocusEvent e) {
        stopCellEditing();
      }  void this_focusGained(FocusEvent e) {
        this.setSelected(this.isSelected()?false:true);
        stopCellEditing();
      }
    }class TableCellCheckBoxEditor_this_focusAdapter extends java.awt.event.FocusAdapter {
      TableCellCheckBoxEditor adaptee;  TableCellCheckBoxEditor_this_focusAdapter(TableCellCheckBoxEditor adaptee) {
        this.adaptee = adaptee;
      }
      public void focusLost(FocusEvent e) {
        adaptee.this_focusLost(e);
      }
      public void focusGained(FocusEvent e) {
        adaptee.this_focusGained(e);
      }
    }
    public class TableCellCheckBoxRenderer extends JCheckBox implements TableCellRenderer {  public TableCellCheckBoxRenderer() {
      }
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        /**@todo: Implement this javax.swing.table.TableCellRenderer method*/
        if(value==null) value="0";
        if(value.equals("0"))
          this.setSelected(false);
        else
          this.setSelected(true);
        if(this.hasFocus())
          this.setFocusPainted(true);
         else this.setFocusPainted(false);    this.setHorizontalAlignment(SwingConstants.CENTER);    setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
        setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());    return this;
      }
    }
      

  4.   

    哦,没注意是要放图标,直接用renderer就可以了,将以上renderer改写为直接实现TableCellRenderer,因为默认是继承自JLabel的,所以直接在getTableCellRendererComponent方法里面set图标就可以了,设置方法同JLabel。
      

  5.   

    1、楼上,getTableCellRendererComponent()返回一个Component,我怎么在JTable里面用呀
    2、我的image在那里设进去
    3、去掉extends JCheckBox 好像不行
      

  6.   

    http://www2.gol.com/users/tame/swing/examples/JTableExamples8.html
      

  7.   

    楼上,那个例子中getColumnClass()和getValueAt()两个方法有关联
    我没法重写getValueAt()因为我要只在表格的第一列放图标,其它列还是要放文字,怎么办?