1. /*
  2. * @(#)WindowsTableHeaderUI.java 1.11 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.java.swing.plaf.windows;
  8. import java.awt.*;
  9. import javax.swing.plaf.basic.*;
  10. import javax.swing.plaf.*;
  11. import javax.swing.table.*;
  12. import javax.swing.border.*;
  13. import javax.swing.*;
  14. public class WindowsTableHeaderUI extends BasicTableHeaderUI {
  15. private TableCellRenderer originalHeaderRenderer;
  16. public static ComponentUI createUI(JComponent h) {
  17. return new WindowsTableHeaderUI();
  18. }
  19. public void installUI(JComponent c) {
  20. super.installUI(c);
  21. if (XPStyle.getXP() != null) {
  22. originalHeaderRenderer = header.getDefaultRenderer();
  23. if (originalHeaderRenderer instanceof UIResource) {
  24. header.setDefaultRenderer(new XPDefaultRenderer());
  25. }
  26. }
  27. }
  28. public void uninstallUI(JComponent c) {
  29. if (header.getDefaultRenderer() instanceof XPDefaultRenderer) {
  30. header.setDefaultRenderer(originalHeaderRenderer);
  31. }
  32. super.uninstallUI(c);
  33. }
  34. private class XPDefaultRenderer extends DefaultTableCellRenderer implements UIResource {
  35. XPStyle.Skin skin = XPStyle.getXP().getSkin("header.headeritem");
  36. boolean isSelected, hasFocus;
  37. int column;
  38. public Component getTableCellRendererComponent(JTable table, Object value,
  39. boolean isSelected, boolean hasFocus,
  40. int row, int column) {
  41. if (table != null) {
  42. JTableHeader header = table.getTableHeader();
  43. if (header != null) {
  44. setFont(header.getFont());
  45. }
  46. }
  47. this.isSelected = isSelected;
  48. this.hasFocus = hasFocus;
  49. this.column = column;
  50. setText((value == null) ? "" : value.toString());
  51. setBorder(new EmptyBorder(skin.getContentMargin()));
  52. return this;
  53. }
  54. private int viewIndexForColumn(TableColumn aColumn) {
  55. TableColumnModel cm = header.getColumnModel();
  56. for (int column = 0; column < cm.getColumnCount(); column++) {
  57. if (cm.getColumn(column) == aColumn) {
  58. return column;
  59. }
  60. }
  61. return -1;
  62. }
  63. public void paint(Graphics g) {
  64. Dimension size = getSize();
  65. int index = 0;
  66. if (column == viewIndexForColumn(header.getDraggedColumn())) {
  67. index = 2;
  68. } else if (isSelected || hasFocus) {
  69. index = 1;
  70. }
  71. skin.paintSkin(g, 0, 0, size.width-1, size.height-1, index);
  72. super.paint(g);
  73. }
  74. }
  75. }