1 19 20 package org.netbeans.modules.tasklist.usertasks.treetable; 21 22 import java.awt.Component ; 23 import java.awt.Dimension ; 24 import java.awt.Font ; 25 import java.awt.Insets ; 26 27 import javax.swing.Icon ; 28 import javax.swing.ImageIcon ; 29 import javax.swing.JLabel ; 30 import javax.swing.JPanel ; 31 import javax.swing.JTable ; 32 import javax.swing.SwingConstants ; 33 import javax.swing.UIManager ; 34 import javax.swing.table.DefaultTableCellRenderer ; 35 import javax.swing.table.JTableHeader ; 36 import javax.swing.table.TableCellRenderer ; 37 import javax.swing.table.TableColumnModel ; 38 import org.netbeans.modules.tasklist.core.table.SortingModel; 39 40 44 public class SortingHeaderRenderer extends JPanel implements TableCellRenderer { 45 54 private static class IconAndLabelLayout implements java.awt.LayoutManager { 55 private Component icon, label; 56 57 63 public IconAndLabelLayout(Component icon, Component label) { 64 this.icon = icon; 65 this.label = label; 66 } 67 68 public java.awt.Dimension preferredLayoutSize(java.awt.Container parent) { 69 Dimension d = new Dimension (); 70 Dimension iconPref = icon.getPreferredSize(); 71 Dimension labelPref = label.getPreferredSize(); 72 d.width = iconPref.width + labelPref.width + 2; 73 d.height = Math.max(iconPref.height, labelPref.height); 74 return d; 75 } 76 77 public void removeLayoutComponent(Component comp) { 78 } 79 80 public void addLayoutComponent(String name, Component comp) { 81 } 82 83 public void layoutContainer(java.awt.Container parent) { 84 Dimension iconPref = icon.getPreferredSize(); 85 Dimension labelPref = label.getPreferredSize(); 86 Insets insets = parent.getInsets(); 87 88 int y = (parent.getHeight() - insets.top - insets.bottom - 89 iconPref.height) / 2; 90 int x = (parent.getWidth() - insets.left - insets.right - 91 iconPref.width - 2 - labelPref.width) / 2; 92 if (y < 0) 93 y = 0; 94 if (x < 0) 95 x = 0; 96 97 x += insets.left; 98 y += insets.top; 99 100 int w = parent.getWidth() - iconPref.width - 2; 101 if (w < 0) 102 w = 0; 103 104 icon.setBounds(x, y, iconPref.width, iconPref.height); 105 106 if (iconPref.width != 0) 107 x = x + iconPref.width + 2; 108 label.setBounds(x, 0, w, parent.getHeight()); 109 } 110 111 public java.awt.Dimension minimumLayoutSize(java.awt.Container parent) { 112 return new Dimension (0, 0); 113 } 114 } 115 116 private static final long serialVersionUID = 1; 117 118 private static ImageIcon SORT_DESC_ICON = 119 new ImageIcon (org.openide.util.Utilities.loadImage( 120 "org/netbeans/modules/tasklist/usertasks/treetable/columnsSortedDesc.gif")); private static ImageIcon SORT_ASC_ICON = 122 new ImageIcon (org.openide.util.Utilities.loadImage( 123 "org/netbeans/modules/tasklist/usertasks/treetable/columnsSortedAsc.gif")); 125 private JLabel label = new JLabel (); 126 private DefaultTableCellRenderer renderer = new DefaultTableCellRenderer (); 127 128 131 public SortingHeaderRenderer() { 132 135 136 renderer.setHorizontalTextPosition(SwingConstants.LEFT); 137 renderer.setOpaque(false); 138 139 add(label); 140 add(renderer); 141 142 setLayout(new SortingHeaderRenderer.IconAndLabelLayout(label, renderer)); 143 } 144 145 public Component getTableCellRendererComponent(JTable table, Object value, 146 boolean isSelected, boolean hasFocus, int row, int column) { 147 if (table != null) { 148 JTableHeader header = table.getTableHeader(); 149 if (header != null) { 150 setForeground(header.getForeground()); 151 setBackground(header.getBackground()); 152 renderer.setFont(header.getFont()); 153 } 154 TableColumnModel tcm = header.getColumnModel(); 155 int modelIndex = tcm.getColumn(column).getModelIndex(); 156 SortingModel tableModel = ((TreeTable) table).getSortingModel(); 157 if (tableModel != null) { 158 if (tableModel.getSortedColumn() == modelIndex) { 159 renderer.setIcon( 160 tableModel.isSortOrderDescending() ? 161 SORT_DESC_ICON : SORT_ASC_ICON); 162 renderer.setFont(this.getFont().deriveFont(Font.BOLD)); 163 } else { 164 renderer.setIcon(null); 165 } 166 } 167 } 168 169 renderer.setText((value == null) ? "" : value.toString()); setBorder(UIManager.getBorder("TableHeader.cellBorder")); 172 return this; 173 } 174 175 180 public void setIcon(Icon icon) { 181 label.setIcon(icon); 182 } 183 184 189 public Icon getIcon() { 190 return label.getIcon(); 191 } 192 } 193 194 195 | Popular Tags |