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 }