package de.javasoft.synthetica.democenter.examples.tips.table;

import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import de.javasoft.plaf.synthetica.SyntheticaLookAndFeel;


/**
 * A simple TableHeaderRenderer to demonstrate how to add padding.  
 */
@SuppressWarnings("serial")
public class PaddingTableHeaderRenderer extends JFrame
{
  Object[] columns = {"Planet", "Temperatur", "Monde", "Ringe"};    
  Object[][] data = 
  {
    {"Merkur", "-170C...+350C", new Integer(0), new Integer(0)},
    {"Venus", "+475C", new Integer(0), new Integer(0)},
    {"Erde", "+22C", new Integer(1), new Integer(0)},
    {"Mars", "-23C", new Integer(2), new Integer(0)},
    {"Jupiter", "-123C", new Integer(16), new Integer(1)},
    {"Saturn", "-18C", new Integer(23), "---"},
    {"Uranus", "-218C", new Integer(18), new Integer(10)},
    {"Neptun", "-228C", new Integer(8), new Integer(3)},
    {"Neptun", "-230C", new Integer(1), new Integer(0)}
  };
  
  public PaddingTableHeaderRenderer()
  {
    super("PaddingTableHeaderRenderer");
    JTable table = new JTable(data, columns);
    final TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); 
//@highlight
    table.getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer()
    {
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int columnIndex)
      {
        /* Before Synthetica V2.3
        JLabel l = new JLabel(value.toString());
        //add padding by EmptyBorder
        l.setBorder(new EmptyBorder(5, 10, 5, 10));
        //set name for default header renderer style
        l.setName("TableHeader.renderer");
        */

        //since Synthetica V2.3 setting border for the original component is allowed
        JLabel l = (JLabel)renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, rowIndex, columnIndex);
        l.setBorder(new EmptyBorder(5, 10, 5, 10));
        
        //add icon, assume sorting column has index 1
        if (columnIndex == 1)
        {
          //the key for a smaller arrow is "Synthetica.arrow.8x8.up"  
          l.setIcon(SyntheticaLookAndFeel.loadIcon("Synthetica.arrow.up"));
          l.setHorizontalTextPosition(JLabel.LEADING);
        }
        else
          l.setIcon(null);
        return l;
      }
    });
//@/highlight
    getContentPane().add(new JScrollPane(table));
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(640, 480);
    setLocationRelativeTo(null);        //center
    setVisible(true);
  }
  
  /**
   * Static main method for application startup. 
   */
  public static void main(String[] args)
  {
    EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        try
        {
          UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel");
          new PaddingTableHeaderRenderer();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }
      
}
