OSDN Git Service

プラットフォームごとのStigmataのホームディレクトリの場所を返す一連のクラスをリファクタリングした.
[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     @Override
47     public Component getListCellRendererComponent(JList list, Object value, int index,
48             boolean isSelected, boolean cellHasFocus){
49         LRItem item = (LRItem)value;
50         if(item != null){
51             left.setText(String.valueOf(item.getLeft()));
52             right.setText(String.valueOf(item.getRight()));
53         }
54
55         if(item.getIcon() != null){
56             left.setIcon(item.getIcon());
57         }
58
59         setBackground(isSelected ? SystemColor.textHighlight: Color.white);
60         left.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
61         right.setBackground(isSelected ? SystemColor.textHighlight: Color.white);
62         left.setForeground(isSelected ? Color.white: Color.black);
63         right.setForeground(isSelected ? Color.gray.brighter(): Color.gray);
64
65         return this;
66     }
67
68     public static class LRItem{
69         private Object left;
70         private Object right;
71         private Icon icon;
72
73         public LRItem(Icon icon, Object left, Object right){
74             this(left, right);
75             setIcon(icon);
76         }
77
78         public LRItem(Object left, Object right){
79             setLeft(left);
80             setRight(right);
81         }
82
83         public Icon getIcon(){
84             return icon;
85         }
86
87         public void setIcon(Icon icon){
88             this.icon = icon;
89         }
90
91         public Object getLeft(){
92             return left;
93         }
94
95         public void setLeft(Object left){
96             this.left = left;
97         }
98
99         public Object getRight(){
100             return right;
101         }
102
103         public void setRight(Object right){
104             this.right = right;
105         }
106     }
107 }