Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/memoire/bu/BuAbstractCellRenderer.java


1   /**
2    * @modification $Date: 2002/12/31 16:20:09 $
3    * @statut       unstable
4    * @file         BuAbstractCellRenderer.java
5    * @version      0.36
6    * @author       Guillaume Desnoix
7    * @email        guillaume@desnoix.com
8    * @license      GNU General Public License 2 (GPL2)
9    * @copyright    1998-2001 Guillaume Desnoix
10   */
11  
12  package com.memoire.bu;
13  
14  import com.memoire.bu.*;
15  import com.memoire.fu.*;
16  
17  import java.awt.*;
18  import java.awt.event.*;
19  
20  import javax.swing.*;
21  import javax.swing.border.*;
22  import javax.swing.table.*;
23  import javax.swing.tree.*;
24  import javax.swing.table.*;
25  import javax.swing.plaf.*;
26  
27  public class BuAbstractCellRenderer
28      extends    BuLabel
29      implements ListCellRenderer, TreeCellRenderer, TableCellRenderer
30           // , ComponentListener, ContainerListener
31  {
32    public static final int LIST    =0;
33    public static final int COMBOBOX=1;
34    public static final int TREE    =2;
35    public static final int TABLE   =3;
36  
37    /*
38    public static final ListCellRenderer LIST_CR=new DefaultListCellRenderer();
39    public static final TreeCellRenderer TREE_CR=new DefaultTreeCellRenderer();
40    */
41  
42    protected static final Border NO_FOCUS_BORDER=new EmptyBorder(1,1,1,1);
43  
44    protected int     type_;
45    protected boolean darkerOddLines_;
46    protected JLabel  delegate_;
47  
48    protected BuAbstractCellRenderer(int _type)
49    {
50      type_          =_type;
51      delegate_      =this;
52      darkerOddLines_=true;
53  
54      switch(type_)
55      {
56      case LIST    : darkerOddLines_=!(Boolean.FALSE.equals(UIManager.get("List.darkerOddLines"    ))); break;
57      case COMBOBOX: darkerOddLines_=!(Boolean.FALSE.equals(UIManager.get("ComboBox.darkerOddLines"))); break;
58      case TREE    : darkerOddLines_=!(Boolean.FALSE.equals(UIManager.get("Tree.darkerOddLines"    ))); break;
59      case TABLE   : darkerOddLines_=!(Boolean.FALSE.equals(UIManager.get("Table.darkerOddLines"   ))); break;
60      }
61    }
62  
63    public boolean isDarkerOddLines() { return darkerOddLines_; }
64    public void setDarkerOddLines(boolean _darkerOddLines) { darkerOddLines_=_darkerOddLines; }
65  
66    public void paint(Graphics _g)
67    {
68      if((delegate_==this)||(delegate_==null))
69        super.paint(_g);
70      else
71      {
72        /*
73        Dimension ps=delegate_.getPreferredSize();
74        Dimension cs=delegate_.getSize();
75        delegate_.setSize(Math.max(ps.width,cs.width),
76        Math.max(ps.height,cs.height));
77        */
78        BuLib.setAntialiasing(_g);
79  
80        // JDK11
81        try { delegate_.paint(_g); }
82        catch(NullPointerException ex)
83    {
84      System.err.println("BuAbstractCellRenderer:84 Null Pointer");
85      Icon old=delegate_.getIcon();
86      delegate_.setIcon(null);
87      delegate_.paint(_g);
88      delegate_.setIcon(old);
89    }
90      }
91    }
92  
93    public Color getBackground()
94    {
95      if((delegate_==this)||(delegate_==null))
96        return super.getBackground();
97      else
98        return delegate_.getBackground();
99    }
100 
101   public void setBackground(Color _color)
102   {
103     if((delegate_==this)||(delegate_==null))
104       super.setBackground(_color);
105     else
106       delegate_.setBackground(_color);
107   }
108 
109   public Color getForeground()
110   {
111     if((delegate_==this)||(delegate_==null))
112       return super.getForeground();
113     else
114       return delegate_.getForeground();
115   }
116 
117   public void setForeground(Color _color)
118   {
119     if((delegate_==this)||(delegate_==null))
120       super.setForeground(_color);
121     else
122       delegate_.setForeground(_color);
123   }
124 
125   public void setBounds(int _x,int _y,int _w, int _h)
126   {
127     if((delegate_==this)||(delegate_==null))
128       super.setBounds(_x,_y,_w,_h);
129     else
130       delegate_.setBounds(_x,_y,_w,_h);
131   }
132 
133   public boolean isDoubleBuffered()
134   {
135     if((delegate_==this)||(delegate_==null))
136       return super.isDoubleBuffered();
137     else
138       return delegate_.isDoubleBuffered();
139   }
140 
141   public void setDoubleBuffered(boolean _state)
142   {
143     if((delegate_==this)||(delegate_==null))
144       super.setDoubleBuffered(_state);
145     else
146       delegate_.setDoubleBuffered(_state);
147   }
148 
149   public Container getParent()
150   {
151     if((delegate_==this)||(delegate_==null))
152       return super.getParent();
153     else
154       return delegate_.getParent();
155   }
156 
157   public Icon getIcon()
158   {
159     if((delegate_==this)||(delegate_==null))
160       return super.getIcon();
161     else
162       return delegate_.getIcon();
163   }
164 
165   public void setIcon(Icon _icon)
166   {
167     if((delegate_==this)||(delegate_==null))
168       super.setIcon(_icon);
169     else
170       delegate_.setIcon(_icon);
171   }
172 
173   public Icon getDisabledIcon()
174   {
175     if((delegate_==this)||(delegate_==null))
176       return super.getDisabledIcon();
177     else
178       return delegate_.getDisabledIcon();
179   }
180 
181   public void setDisabledIcon(Icon _icon)
182   {
183     if((delegate_==this)||(delegate_==null))
184       super.setDisabledIcon(_icon);
185     else
186       delegate_.setDisabledIcon(_icon);
187   }
188 
189   public int getDisplayedMnemonic()
190   {
191     if((delegate_==this)||(delegate_==null))
192       return super.getDisplayedMnemonic();
193     else
194       return delegate_.getDisplayedMnemonic();
195   }
196 
197   public void setDisplayedMnemonic(int _mnemonic)
198   {
199     if((delegate_==this)||(delegate_==null))
200       super.setDisplayedMnemonic(_mnemonic);
201     else
202       delegate_.setDisplayedMnemonic(_mnemonic);
203   }
204 
205   public int getHorizontalAlignment()
206   {
207     if((delegate_==this)||(delegate_==null))
208       return super.getHorizontalAlignment();
209     else
210       return delegate_.getHorizontalAlignment();
211   }
212 
213   public void setHorizontalAlignment(int _halign)
214   {
215     if((delegate_==this)||(delegate_==null))
216       super.setHorizontalAlignment(_halign);
217     else
218       delegate_.setHorizontalAlignment(_halign);
219   }
220 
221   public int getHorizontalTextPosition()
222   {
223     if((delegate_==this)||(delegate_==null))
224       return super.getHorizontalTextPosition();
225     else
226       return delegate_.getHorizontalTextPosition();
227   }
228 
229   public void setHorizontalTextPosition(int _htp)
230   {
231     if((delegate_==this)||(delegate_==null))
232       super.setHorizontalTextPosition(_htp);
233     else
234       delegate_.setHorizontalTextPosition(_htp);
235   }
236 
237   public int getIconTextGap()
238   {
239     if((delegate_==this)||(delegate_==null))
240       return super.getIconTextGap();
241     else
242       return delegate_.getIconTextGap();
243   }
244 
245   public void setIconTextGap(int _itg)
246   {
247     if((delegate_==this)||(delegate_==null))
248       super.setIconTextGap(_itg);
249     else
250       delegate_.setIconTextGap(_itg);
251   }
252 
253   public Dimension getMinimumSize()
254   {
255     if((delegate_==this)||(delegate_==null))
256       return super.getMinimumSize();
257     else
258       return delegate_.getMinimumSize();
259   }
260 
261   public void setMinimumSize(Dimension _size)
262   {
263     if((delegate_==this)||(delegate_==null))
264       super.setMinimumSize(_size);
265     else
266       delegate_.setMinimumSize(_size);
267   }
268 
269   public Dimension getMaximumSize()
270   {
271     if((delegate_==this)||(delegate_==null))
272       return super.getMaximumSize();
273     else
274       return delegate_.getMaximumSize();
275   }
276 
277   public void setMaximumSize(Dimension _size)
278   {
279     if((delegate_==this)||(delegate_==null))
280       super.setMaximumSize(_size);
281     else
282       delegate_.setMaximumSize(_size);
283   }
284 
285   public Dimension getPreferredSize()
286   {
287     Dimension r=null;
288 
289     if((delegate_==this)||(delegate_==null))
290     {
291       r=super.getPreferredSize();
292       if((type_==TREE)&&(r!=null))
293   r=new Dimension(r.width+3,r.height);
294     }
295     else
296       r=delegate_.getPreferredSize();
297 
298     return r;
299   }
300 
301   public void setPreferredSize(Dimension _size)
302   {
303     if((delegate_==this)||(delegate_==null))
304       super.setPreferredSize(_size);
305     else
306       delegate_.setPreferredSize(_size);
307   }
308 
309   public String getText()
310   {
311     if((delegate_==this)||(delegate_==null))
312       return super.getText();
313     else
314       return delegate_.getText();
315   }
316 
317   public void setText(String _text)
318   {
319     if((delegate_==this)||(delegate_==null))
320       super.setText(_text);
321     else
322       delegate_.setText(_text);
323   }
324 
325   public int getVerticalAlignment()
326   {
327     if((delegate_==this)||(delegate_==null))
328       return super.getVerticalAlignment();
329     else
330       return delegate_.getVerticalAlignment();
331   }
332 
333   public void setVerticalAlignment(int _halign)
334   {
335     if((delegate_==this)||(delegate_==null))
336       super.setVerticalAlignment(_halign);
337     else
338       delegate_.setVerticalAlignment(_halign);
339   }
340 
341   public int getVerticalTextPosition()
342   {
343     if((delegate_==this)||(delegate_==null))
344       return super.getVerticalTextPosition();
345     else
346       return delegate_.getVerticalTextPosition();
347   }
348 
349   public void setVerticalTextPosition(int _htp)
350   {
351     if((delegate_==this)||(delegate_==null))
352       super.setVerticalTextPosition(_htp);
353     else
354       delegate_.setVerticalTextPosition(_htp);
355   }
356 
357   /*
358     + getLabelFor () : Component
359     + getUI () : LabelUI
360     + getUIClassID () : String
361   */
362 
363   public void doLayout()
364   {
365     if((delegate_==this)||(delegate_==null))
366       super.doLayout();
367     else
368       delegate_.doLayout();
369   }
370 
371   public void revalidate()
372   {
373     if((delegate_==this)||(delegate_==null))
374       super.revalidate();
375     else
376       delegate_.revalidate();
377   }
378 
379   public void invalidate()
380   {
381     if((delegate_==this)||(delegate_==null))
382       super.invalidate();
383     else
384       delegate_.invalidate();
385   }
386 
387   public void validate()
388   {
389     if((delegate_==this)||(delegate_==null))
390       super.validate();
391     else
392       delegate_.validate();
393   }
394 
395   //public void validate() {}
396   //public void revalidate() {}
397   //public void repaint(long tm, int x, int y, int width, int height) {}
398   //public void repaint(Rectangle r) {}
399 
400   protected void firePropertyChange(String _name, Object _old, Object _new)
401   {
402     if(_name=="text")
403       super.firePropertyChange(_name, _old, _new);
404   }
405 
406   public void firePropertyChange(String _name, byte    _old, byte    _new) { }
407   public void firePropertyChange(String _name, char    _old, char    _new) { }
408   public void firePropertyChange(String _name, short   _old, short   _new) { }
409   public void firePropertyChange(String _name, int     _old, int     _new) { }
410   public void firePropertyChange(String _name, long    _old, long    _new) { }
411   public void firePropertyChange(String _name, float   _old, float   _new) { }
412   public void firePropertyChange(String _name, double  _old, double  _new) { }
413   public void firePropertyChange(String _name, boolean _old, boolean _new) { }
414 
415   /*
416   public void componentResized(ComponentEvent _evt) { }
417   public void componentMoved  (ComponentEvent _evt) { }
418   public void componentShown  (ComponentEvent _evt) { }
419   public void componentHidden (ComponentEvent _evt) { }
420 
421   public void componentAdded  (ContainerEvent _evt) { }
422   public void componentRemoved(ContainerEvent _evt) { }
423   */
424 
425   public Component getListCellRendererComponent
426     (JList   _list,
427      Object  _value,
428      int     _row,
429      boolean _selected,
430      boolean _focus)
431   {
432     return getRealRenderer
433       (_list,_value,_selected,false,true,_row,0,_focus);
434   }
435 
436   public Component getTreeCellRendererComponent
437     (JTree   _tree,
438      Object  _value,
439      boolean _selected,
440      boolean _expanded,
441      boolean _leaf,
442      int     _row,
443      boolean _focus)
444   {
445     return getRealRenderer
446       (_tree,_value,_selected,_expanded,_leaf,_row,0,_focus);
447   }
448 
449   public Component getTableCellRendererComponent
450     (JTable  _table,
451      Object  _value,
452      boolean _selected,
453      boolean _focus,
454      int     _row,
455      int     _column)
456   {
457     return getRealRenderer
458       (_table,_value,_selected,false,false,_row,_column,_focus);
459   }
460 
461   protected Component getRealRenderer
462     (JComponent _comp,
463      Object     _value,
464      boolean    _selected,
465      boolean    _expanded,
466      boolean    _leaf,
467      int        _row,
468      int        _column,
469      boolean    _focus)
470   {
471     delegate_=this;
472 
473     Object o=null;
474     switch(type_)
475     {
476     case LIST:
477   o=UIManager.get("List.cellRenderer");
478   break;
479     case COMBOBOX:
480   o=UIManager.get("ComboBox.cellRenderer");
481   if(o==null) o=UIManager.get("ComboBox.renderer");
482   if(o==null) o=UIManager.get("List.cellRenderer");
483   break;
484     case TREE:
485   o=UIManager.get("Tree.cellRenderer");
486   break;
487     case TABLE:
488   o=UIManager.get("Table.cellRenderer");
489   break;
490     }
491 
492     if(FuLib.jdk()>1.1)
493     {
494       if(o instanceof ListCellRenderer)
495       {
496   o=((ListCellRenderer)o).
497     getListCellRendererComponent
498     ((JList)_comp,_value,_row,_selected,_focus);
499   if(o instanceof JLabel) delegate_=(JLabel)o;
500       }
501 
502       if(o instanceof TreeCellRenderer)
503       {
504   o=((TreeCellRenderer)o).
505     getTreeCellRendererComponent
506     ((JTree)_comp,_value,_selected,_expanded,_leaf,_row,_focus);
507   if(o instanceof JLabel) delegate_=(JLabel)o;
508       }
509       
510       if(o instanceof TableCellRenderer)
511       {
512   o=((TableCellRenderer)o).
513     getTableCellRendererComponent
514     ((JTable)_comp,_value,_selected,_focus,_row,_column);
515   if(o instanceof JLabel) delegate_=(JLabel)o;
516       }
517     }
518 
519     /*
520     if(delegate_==this)
521     {
522       switch(type_)
523       {
524         case LIST:
525       delegate_=(JLabel)LIST_CR.
526     getListCellRendererComponent
527     ((JList)_comp,_value,_row,_selected,_focus);
528       break;
529         case COMBOBOX:
530       delegate_=(JLabel)LIST_CR. //COMBOBOX_CR.
531     getListCellRendererComponent
532     ((JList)_comp,_value,_row,_selected,_focus);
533       break;
534         case TREE:
535       delegate_=(JLabel)TREE_CR.
536     getTreeCellRendererComponent
537     ((JTree)_comp,_value,_selected,_expanded,_leaf,_row,_focus);
538       break;
539         case TABLE:
540       break;
541       }
542     }
543     */
544 
545     if(delegate_==this)
546     {
547       // JDK 1.1
548       //delegate_.setComponentOrientation(_list.getComponentOrientation());
549 
550       //System.err.println("BuAbstractCellRenderer: "+type_+" not found");
551       
552       if(_selected)
553       {
554   if(_comp instanceof JList)
555   {
556     delegate_.setBackground(((JList)_comp).getSelectionBackground());
557     delegate_.setForeground(((JList)_comp).getSelectionForeground());
558   }
559   else
560   if(_comp instanceof JTree)
561   {
562     delegate_.setBackground(UIManager.getColor("Tree.selectionBackground"));
563     delegate_.setForeground(UIManager.getColor("Tree.selectionForeground"));
564   }
565   else
566   if(_comp instanceof JTable)
567   {
568     delegate_.setBackground(((JTable)_comp).getSelectionBackground());
569     delegate_.setForeground(((JTable)_comp).getSelectionForeground());
570   }
571       }
572       else
573       {
574   delegate_.setBackground(_comp.getBackground());
575   delegate_.setForeground(_comp.getForeground());
576       }
577 
578       if(_comp instanceof JTree)
579       {
580   delegate_.setText(((JTree)_comp).convertValueToText
581         (_value,_selected,_expanded,_leaf,_row,_focus));
582 
583        if(_leaf    ) delegate_.setIcon(UIManager.getIcon("Tree.leafIcon"  ));
584   else if(_expanded) delegate_.setIcon(UIManager.getIcon("Tree.openIcon"  ));
585   else               delegate_.setIcon(UIManager.getIcon("Tree.closedIcon"));
586       }
587       else
588       {
589   delegate_.setText(""+_value);
590       }
591       
592       delegate_.setOpaque(true);
593       delegate_.setEnabled(_comp.isEnabled());
594       delegate_.setFont(_comp.getFont());
595       delegate_.setBorder
596     (_focus
597      ? UIManager.getBorder((_comp instanceof JTable)
598          ? "Table.focusCellHighlightBorder"
599          : "List.focusCellHighlightBorder")
600      : NO_FOCUS_BORDER);
601     }
602 
603     /*
604     Color  bg=getBackground();
605     Color  fg=getForeground();
606     int    a =LEFT;
607     String t ="";
608     Icon   i =getIcon();
609 
610     if(_value instanceof Number)
611     {
612       a=RIGHT;
613       if(((Number)_value).doubleValue()<0)
614   fg=blueify(fg);
615       if(numberFormat_!=null)
616   t=numberFormat_.format(((Number)_value).doubleValue());
617       else
618   t=_value.toString();
619     }
620     else
621     if(_value instanceof Date)
622     {
623       if(dateFormat_!=null)
624   t=dateFormat_.format((Date)_value);
625       else
626   t=_value.toString();
627     }
628     else
629     if(_value instanceof Boolean)
630     {
631       if(_selected)
632   bg=((Boolean)_value).booleanValue()
633     ? BuLib.getColor(new Color(128,255,128))
634     : BuLib.getColor(new Color(255,128,128));
635       else
636   bg=((Boolean)_value).booleanValue()
637     ? BuLib.getColor(new Color(192,255,192))
638     : BuLib.getColor(new Color(255,192,192));
639     }
640     else
641     if(_value instanceof BuIcon)
642     {
643       i=BuResource.resizeIcon((BuIcon)_value,Math.max(16,ft.getSize()));
644     }
645     else
646     if(_value instanceof Icon)
647     {
648       i=(Icon)_value;
649     }
650     else
651     if(_value==null)
652     {
653       t="";
654     }
655     else
656     {
657       t=_value.toString();
658     }
659     */
660 
661     if(darkerOddLines_&&(_row%2)==1) setBackground(darken(getBackground()));
662 
663     return this;
664   }
665 
666   private static final Color darken(Color _c)
667   {
668     int r=_c.getRed();
669     int g=_c.getGreen();
670     int b=_c.getBlue();
671 
672     r=r*19/20;
673     g=g*19/20;
674     b=b*19/20;
675 
676     Color c=(_c instanceof ColorUIResource)
677       ? new ColorUIResource(r,g,b)
678       : new Color(r,g,b);
679 
680     return c;
681   }
682 
683   // Factory
684 
685   private static final ListCellRenderer LISTCR =
686       new BuAbstractCellRenderer(LIST);
687   private static final ListCellRenderer COMBOBOXCR=
688       new BuAbstractCellRenderer(COMBOBOX);
689   private static final TreeCellRenderer TREECR=
690       new BuAbstractCellRenderer(TREE);
691   private static final TableCellRenderer TABLECR=
692       new BuAbstractCellRenderer(TABLE);
693 
694   public static final ListCellRenderer getDefaultListCellRenderer()
695   {
696     return LISTCR;
697   }
698 
699   public static final ListCellRenderer getDefaultComboBoxCellRenderer()
700   {
701     return COMBOBOXCR;
702   }
703 
704   public static final TreeCellRenderer getDefaultTreeCellRenderer()
705   {
706     return TREECR;
707   }
708 
709   public static final TableCellRenderer getDefaultTableCellRenderer()
710   {
711     return TABLECR;
712   }
713 }