OSDN Git Service

4aafde74764024e23cc524a7779c0f742bf578be
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / ClippedLRListCellRenderer.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.BorderLayout;
8 import java.awt.Color;
9 import java.awt.Component;
10 import java.awt.Dimension;
11 import java.awt.SystemColor;
12
13 import javax.swing.BorderFactory;
14 import javax.swing.Icon;
15 import javax.swing.JLabel;
16 import javax.swing.JList;
17 import javax.swing.JPanel;
18 import javax.swing.ListCellRenderer;
19
20 /**
21  * copy from tempura memo available at
22  * http://terai.xrea.jp/Swing/ClippedLRComboBox.html
23  * 
24  * @author Haruaki Tamada
25  * @version $Revision$ 
26  */
27 public class ClippedLRListCellRenderer extends JPanel implements ListCellRenderer{
28     private static final long serialVersionUID = 32943674625674235L;
29
30     private final JLabel left = new JLabel();
31     private final JLabel right = new JLabel();
32
33     public ClippedLRListCellRenderer(Dimension dim, int rightWidth){
34         super(new BorderLayout());
35         left.setOpaque(true);
36         right.setOpaque(true);
37         left.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0));
38         right.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
39         right.setPreferredSize(new Dimension(rightWidth, 0));
40
41         add(left, BorderLayout.CENTER);
42         add(right, BorderLayout.EAST);
43         setPreferredSize(dim);
44     }
45
46     public Component getListCellRendererComponent(JList list, Object value, int index,
47             boolean isSelected, boolean cellHasFocus){
48         LRItem item = (LRItem)value;
49         if(item != null){
50             left.setText(String.valueOf(item.getLeft()));
51             right.setText(String.valueOf(item.getRight()));
52         }
53
54         if(item.getIcon() != null){
55             left.setIcon(item.getIcon());
56         }
57
58         setBackground(isSelected ? SystemColor.textHighlight: Color.white);
59         left.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
60         right.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
61         left.setForeground(isSelected ? Color.white: Color.black);
62         right.setForeground(isSelected ? Color.gray.brighter(): Color.gray);
63
64         return this;
65     }
66
67     public static class LRItem{
68         private Object left;
69         private Object right;
70         private Icon icon;
71
72         public LRItem(Icon icon, Object left, Object right){
73             this(left, right);
74             setIcon(icon);
75         }
76
77         public LRItem(Object left, Object right){
78             setLeft(left);
79             setRight(right);
80         }
81
82         public Icon getIcon(){
83             return icon;
84         }
85
86         public void setIcon(Icon icon){
87             this.icon = icon;
88         }
89
90         public Object getLeft(){
91             return left;
92         }
93
94         public void setLeft(Object left){
95             this.left = left;
96         }
97
98         public Object getRight(){
99             return right;
100         }
101
102         public void setRight(Object right){
103             this.right = right;
104         }
105     }
106 }