All pastes #254437 Raw Edit

Someone

public text v1 · immutable
#254437 ·published 2006-11-21 21:35 UTC
rendered paste body
/*
 * Created by Philipp Marx on 19.11.2006
 *
 */

package de.smigfu.swingtable;

import java.awt.Component;

import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.LookAndFeel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.plaf.LabelUI;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

import com.sun.java.swing.plaf.windows.WindowsLabelUI;

/**
 * This is a default-implementation for a <code>SwingTableHeaderRenderer</code>. 
 * 
 * This class can be subclassed.
 *
 * @version $Revision$ $Date$
 *
 * @author Philipp Marx, last modified by $Author$
 */
public class DefaultSwingTableHeaderRenderer implements CmpTableHeaderRenderer {

   /** The mark which should be displayed in the tableheader. */
   private Object mark;

   /** The index of the column (as they are ordered in the table). */
   private int viewColumnIndex;

   /**
    * Constructs a <code>DefaultSwingTableHeaderRenderer</code>.
    *
    */
   public DefaultSwingTableHeaderRenderer() {
      this.mark = null;
      this.viewColumnIndex = -1;
   }

   /* (non-Javadoc)
    * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
    */
   public Component getTableCellRendererComponent(JTable table,
                                                  Object value,
                                                  boolean isSelected,
                                                  boolean hasFocus,
                                                  int row,
                                                  int column) {

      // Use the DefaultTableCellRenderer to do the common work.
      Component c = new DefaultTableCellRenderer().getTableCellRendererComponent(table,
                                                                                 value,
                                                                                 isSelected,
                                                                                 hasFocus,
                                                                                 row,
                                                                                 column);

      // DefaultTableCellRenderer will return a label.
      JLabel label = ((JLabel) c);

      // Take some more apperance actions (center text, set border and set colors).
      label.setHorizontalAlignment(SwingConstants.CENTER);
      label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
      
      if (table != null) {
         JTableHeader header = table.getTableHeader();
         if (header != null) {
            label.setForeground(header.getForeground());
            label.setBackground(header.getBackground());
            label.setFont(header.getFont());
         }
      }

      // If this is the "sorted" column we want to set the "mark".
      if (column == this.viewColumnIndex) {

         // If mark is an icon, we handle this appropriate.
         if (this.mark instanceof Icon) {
            label.setIcon((Icon) this.mark);
         } else {
            String text = label.getText();
            text += " (" + String.valueOf(this.mark) + ")";
            label.setText(text);
         }
      }

      return c;
   }

   /* (non-Javadoc)
    * @see de.smigfu.swingtable.SwingTableHeaderRenderer#setSortedColumnMark(java.lang.Object, int)
    */
   public void setSortedColumnMark(Object mark, int viewColumnIndex) {
      this.mark = mark;
      this.viewColumnIndex = viewColumnIndex;
   }
}