你可以参考一下下面的代码:// volume values.
//
import java.awt.*;
import javax.swing.*;public class MixerTest2 extends JFrame {  public MixerTest2() {
    super("Customer Editor Test");
    setSize(600,160);
    setDefaultCloseOperation(EXIT_ON_CLOSE);    MixerModel test = new MixerModel();
    test.dump();
    JTable jt = new JTable(test);
    jt.setDefaultRenderer(Volume.class, new VolumeRenderer());
    jt.setDefaultEditor(Volume.class, new VolumeEditor());
    JScrollPane jsp = new JScrollPane(jt);
    getContentPane().add(jsp, BorderLayout.CENTER);
  }  public static void main(String args[]) {
    MixerTest2 mt = new MixerTest2();
    mt.setVisible(true);
  }
}-------------------------------------------------------------------
// Volume.java
// A simple data structure for track volumes on a mixer.
//
public class Volume {
  private int volume;  public Volume(int v) { setVolume(v); }
  public Volume() { this(50); }  public void setVolume(int v) { volume = (v < 0 ? 0 : v > 100 ? 100 : v); }
  public void setVolume(Object v) { 
    if (v instanceof String) {
      setVolume(Integer.parseInt((String)v));
    }
    else if (v instanceof Number) {
      setVolume(((Number)v).intValue());
    }
    else if (v instanceof Volume) {
      setVolume(((Volume)v).getVolume());
    }
  }  public int getVolume() { return volume; }  public String toString() { return String.valueOf(volume); }
}--------------------------------------------------------------------
// VolumeEditor.java
// A slider Editor for volume values in a table.
//
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;public class VolumeEditor extends JSlider implements TableCellEditor {  public OkCancel helper = new OkCancel();
  protected transient Vector listeners;
  protected transient int originalValue;
  protected transient boolean editing;  public VolumeEditor() {
    super(SwingConstants.HORIZONTAL);
    listeners = new Vector();
  }  // Inner class for the ok/cancel popup window that displays below the
  // active scrollbar.  It's position will have to be determined by the
  // editor when getTableCellEditorComponent() is called.
  public class OkCancel extends JWindow {
    private JButton okB = new JButton(new ImageIcon("accept.gif"));
    private JButton cancelB = new JButton(new ImageIcon("decline.gif"));
    private int w = 50;
    private int h = 24;    public OkCancel() {
      setSize(w,h);
      setBackground(Color.yellow);
      JPanel p = new JPanel(new GridLayout(0,2));
      //p.setBorder(BorderFactory.createLineBorder(Color.gray));
      //okB.setBorder(null);
      //cancelB.setBorder(null);
      p.add(okB);
      p.add(cancelB);
      setContentPane(p);      okB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
          stopCellEditing();
        }
      });      cancelB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
          cancelCellEditing();
        }
      });
    }
  }   public Component getTableCellEditorComponent(JTable table,Object value,
                                               boolean isSelected,
                                               int row,int column) {
    if (value == null) {
      return this;
    }
    if (value instanceof Volume) {
      setValue(((Volume)value).getVolume());
    }
    else {
      setValue(0);
    }
    table.setRowSelectionInterval(row, row);
    table.setColumnSelectionInterval(column, column);
    originalValue = getValue();
    editing = true;
    Point p = table.getLocationOnScreen();
    Rectangle r = table.getCellRect(row, column, true);
    helper.setLocation(r.x + p.x + getWidth() - 50, r.y + p.y + getHeight());
    helper.setVisible(true);
    return this;
  }  // CellEditor methods
  public void cancelCellEditing() {
    fireEditingCanceled();
    editing = false;
    helper.setVisible(false);
  }  public Object getCellEditorValue() {return new Integer(getValue());}  public boolean isCellEditable(EventObject eo) {return true;}
  
  public boolean shouldSelectCell(EventObject eo) {
    return true;
  }  public boolean stopCellEditing() {
    fireEditingStopped();
    editing = false;
    helper.setVisible(false);
    return true;
  }  public void addCellEditorListener(CellEditorListener cel) {
    listeners.addElement(cel);
  }
  
  public void removeCellEditorListener(CellEditorListener cel) {
    listeners.removeElement(cel);
  }  protected void fireEditingCanceled() {
    setValue(originalValue);
    ChangeEvent ce = new ChangeEvent(this);
    for (int i = listeners.size() - 1; i >= 0; i--) {
      ((CellEditorListener)listeners.elementAt(i)).editingCanceled(ce);
    }
  }  protected void fireEditingStopped() {
    ChangeEvent ce = new ChangeEvent(this);
    for (int i = listeners.size() - 1; i >= 0; i--) {
      ((CellEditorListener)listeners.elementAt(i)).editingStopped(ce);
    }
  }
}
-----------------------------------------------------------------------
// VolumeRenderer.java
// A slider renderer for volume values in a table.
//
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.*;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;
  }
}全部拷下来放在一起,效果可以运行出来