package studio.ui; import studio.kdb.K; import studio.kdb.KTableModel; import studio.kdb.LimitedWriter; import java.awt.Color; import java.awt.Component; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; class CellRenderer extends DefaultTableCellRenderer { private static Color keyColor = new Color(220,255,220); private static Color altColor = new Color(220,220,255); private static Color nullColor = new Color(255,150,150); private static Color selColor = UIManager.getColor("Table.selectionBackground"); private Color fgColor; private JTable table = null; private void initLabel(JTable table) { setHorizontalAlignment(SwingConstants.RIGHT); setOpaque(true); int height = getPreferredSize().height; // label.setFont(table.getTableHeader().getFont()); // label.setBackground(table.getTableHeader().getBackground()); // label.setForeground(table.getTableHeader().getForeground()); // label.setBounds(1,1,1,1); } public CellRenderer(JTable t) { super(); table = t; table.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent propertyChangeEvent) { if ("zoom".equals(propertyChangeEvent.getPropertyName())) setFont(table.getFont()); } }); initLabel(t); setFont(UIManager.getFont("Table.font")); setBackground(UIManager.getColor("Table.background")); fgColor = UIManager.getColor("Table.foreground"); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //setText(TypeFormatter.format(value)); //setText(value.toString()); if (value instanceof K.KBase) { K.KBase kb = (K.KBase) value; LimitedWriter w = new LimitedWriter(256); try { kb.toString(w,kb instanceof K.KBaseVector); } catch (IOException e) { e.printStackTrace(); } catch (LimitedWriter.LimitException ex) { } ; setText(w.toString()); setForeground(kb.isNull() ? nullColor : fgColor); } else { // setText(value.toString()); // setForeground(UIManager.getColor("Table.foreground")); } if (!isSelected) { KTableModel ktm = (KTableModel) table.getModel(); column = table.convertColumnIndexToModel(column); if (ktm.isKey(column)) setBackground(keyColor); else if (row % 2 == 0) setBackground(altColor); else setBackground(UIManager.getColor("Table.background")); } else { setForeground(UIManager.getColor("Table.selectionForeground")); setBackground(selColor); } /* int availableWidth= table.getColumnModel().getColumn(column).getWidth(); availableWidth -= table.getIntercellSpacing().getWidth(); Insets borderInsets = getBorder().getBorderInsets((Component)this); availableWidth -= (borderInsets.left + borderInsets.right); String cellText = getText(); FontMetrics fm = getFontMetrics( getFont() ); if (fm.stringWidth(cellText) > availableWidth) { String dots= "..."; int textWidth = fm.stringWidth( dots ); int nChars = cellText.length() - 1; for (; nChars > 0; nChars--) { textWidth += fm.charWidth(cellText.charAt(nChars)); if (textWidth > availableWidth) { break; } } setText( dots + cellText.substring(nChars + 1)); } **/ return this; } }