| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package sun.tools.jconsole.inspector;  | 
 | 
 | 
 | 
import java.awt.Color;  | 
 | 
import java.awt.Component;  | 
 | 
import java.awt.Font;  | 
 | 
import javax.swing.JTable;  | 
 | 
import javax.swing.table.DefaultTableCellRenderer;  | 
 | 
import javax.swing.table.DefaultTableModel;  | 
 | 
import javax.swing.table.TableCellRenderer;  | 
 | 
 | 
 | 
public abstract class XTable extends JTable { | 
 | 
    static final int NAME_COLUMN = 0;  | 
 | 
    static final int VALUE_COLUMN = 1;  | 
 | 
    private Color defaultColor, editableColor, errorColor;  | 
 | 
    private Font normalFont, boldFont;  | 
 | 
 | 
 | 
    public XTable () { | 
 | 
        super();  | 
 | 
        @SuppressWarnings("serial") | 
 | 
        final TableSorter sorter = new TableSorter();  | 
 | 
        setModel(sorter);  | 
 | 
        sorter.addMouseListenerToHeaderInTable(this);  | 
 | 
        setRowSelectionAllowed(false);  | 
 | 
        setColumnSelectionAllowed(false);  | 
 | 
        setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);  | 
 | 
    }  | 
 | 
 | 
 | 
    Color getDefaultColor() { | 
 | 
        return defaultColor;  | 
 | 
    }  | 
 | 
 | 
 | 
    Color getEditableColor() { | 
 | 
        return editableColor;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    void sortRequested(int column) { | 
 | 
        // This is a hook for subclasses  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public int getSelectedIndex() { | 
 | 
        return convertRowToIndex(getSelectedRow());  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public int convertRowToIndex(int row) { | 
 | 
        if (row == -1) return row;  | 
 | 
        if (getModel() instanceof TableSorter) { | 
 | 
            return ((TableSorter) getModel()).getIndexOfRow(row);  | 
 | 
        } else { | 
 | 
            return row;  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    public void emptyTable() { | 
 | 
        DefaultTableModel model = (DefaultTableModel)getModel();  | 
 | 
        while (model.getRowCount()>0)  | 
 | 
            model.removeRow(0);  | 
 | 
    }  | 
 | 
 | 
 | 
    public abstract boolean isTableEditable();  | 
 | 
    public abstract boolean isColumnEditable(int column);  | 
 | 
    public abstract boolean isReadable(int row);  | 
 | 
    public abstract boolean isWritable(int row);  | 
 | 
    public abstract boolean isCellError(int row, int col);  | 
 | 
    public abstract boolean isAttributeViewable(int row, int col);  | 
 | 
    public abstract void setTableValue(Object value,int row);  | 
 | 
    public abstract Object getValue(int row);  | 
 | 
    public abstract String getClassName(int row);  | 
 | 
    public abstract String getValueName(int row);  | 
 | 
 | 
 | 
    public boolean isReadWrite(int row) { | 
 | 
        return (isReadable(row) && isWritable(row));  | 
 | 
    }  | 
 | 
 | 
 | 
    //JTable re-implementation  | 
 | 
 | 
 | 
      | 
 | 
    @Override  | 
 | 
    public boolean isCellEditable(int row, int col) { | 
 | 
        return ((isTableEditable() && isColumnEditable(col)  | 
 | 
                 &&  isWritable(row)  | 
 | 
                 && Utils.isEditableType(getClassName(row))));  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
    public boolean isCellDroppable(int row, int col) { | 
 | 
        return (isTableEditable() && isColumnEditable(col)  | 
 | 
                && isWritable(row));  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
    public String getToolTip(int row, int column) { | 
 | 
        return null;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    @Override  | 
 | 
    public TableCellRenderer getCellRenderer(int row, int column) { | 
 | 
        DefaultTableCellRenderer tcr =  | 
 | 
            (DefaultTableCellRenderer) super.getCellRenderer(row,column);  | 
 | 
        tcr.setToolTipText(getToolTip(row,column));  | 
 | 
        if (defaultColor == null) { | 
 | 
            defaultColor = tcr.getForeground();  | 
 | 
            editableColor = Color.blue;  | 
 | 
            errorColor = Color.red;  | 
 | 
              | 
 | 
            if (defaultColor == null) { | 
 | 
                return tcr;  | 
 | 
            }  | 
 | 
        }  | 
 | 
        if (column != VALUE_COLUMN) { | 
 | 
            tcr.setForeground(defaultColor);  | 
 | 
            return tcr;  | 
 | 
        }  | 
 | 
        if (isCellError(row,column)) { | 
 | 
            tcr.setForeground(errorColor);  | 
 | 
        } else if (isCellEditable(row, column)) { | 
 | 
            tcr.setForeground(editableColor);  | 
 | 
        } else { | 
 | 
            tcr.setForeground(defaultColor);  | 
 | 
        }  | 
 | 
        return tcr;  | 
 | 
    }  | 
 | 
 | 
 | 
    @Override  | 
 | 
    public Component prepareRenderer(TableCellRenderer renderer,  | 
 | 
                                     int row, int column) { | 
 | 
        Component comp = super.prepareRenderer(renderer, row, column);  | 
 | 
 | 
 | 
        if (normalFont == null) { | 
 | 
            normalFont = comp.getFont();  | 
 | 
            boldFont = normalFont.deriveFont(Font.BOLD);  | 
 | 
        }  | 
 | 
 | 
 | 
        if (column == VALUE_COLUMN && isAttributeViewable(row, VALUE_COLUMN)) { | 
 | 
            comp.setFont(boldFont);  | 
 | 
        } else { | 
 | 
            comp.setFont(normalFont);  | 
 | 
        }  | 
 | 
 | 
 | 
        return comp;  | 
 | 
    }  | 
 | 
}  |