OSDN Git Service

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