Mega Code Archive

 
Categories / Java by API / Javax Swing Table
 

Extends JSlider implements TableCellRenderer

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.GridLayout; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventObject; import java.util.Vector; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSlider; import javax.swing.JTable; import javax.swing.JWindow; import javax.swing.SwingConstants; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class MainClass extends JFrame {   public MainClass() {     super("Customer Editor Test");     setSize(600, 160);     setDefaultCloseOperation(EXIT_ON_CLOSE);     MixerModel test = new MixerModel();     JTable jt = new JTable(test);     jt.setDefaultRenderer(Volume.class, new VolumeRenderer());     JScrollPane jsp = new JScrollPane(jt);     getContentPane().add(jsp, BorderLayout.CENTER);   }   public static void main(String args[]) {     MainClass mt = new MainClass();     mt.setVisible(true);   } } class MixerModel extends AbstractTableModel {   String headers[] = { "Track", "Start", "Stop", "Left Volume", "Right Volume" };   Class columnClasses[] = { String.class, String.class, String.class, Volume.class, Volume.class };   Object data[][] = { { "Bass", "0:00:000", "1:00:000", new Volume(56), new Volume(56) },       { "Strings", "0:00:000", "0:52:010", new Volume(72), new Volume(52) },       { "Brass", "0:08:000", "1:00:000", new Volume(99), new Volume(0) },       { "Wind", "0:08:000", "1:00:000", new Volume(0), new Volume(99) }, };   public int getRowCount() {     return data.length;   }   public int getColumnCount() {     return headers.length;   }   public Class getColumnClass(int c) {     return columnClasses[c];   }   public String getColumnName(int c) {     return headers[c];   }   public boolean isCellEditable(int r, int c) {     return true;   }   public Object getValueAt(int r, int c) {     return data[r][c];   }   public void setValueAt(Object value, int r, int c) {     if (c >= 3) {       ((Volume) data[r][c]).setVolume(value);     } else {       data[r][c] = value;     }   } } 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);   } } class VolumeRenderer extends JSlider implements TableCellRenderer {   public VolumeRenderer() {     super(SwingConstants.HORIZONTAL);     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;   } }