1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
package cppcheckplus.control;
import cppcheckplus.shortcut.MyShortcutItem;
import cppcheckplus.shortcut.MyShortcutPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;
//快捷菜单
public class MyListRenderer extends DefaultListCellRenderer {
private JPanel itemRender;
private int separatorHeight = 30;
//每组List的分割Group
private JPanel separatorPanel;
private JLabel separatorLabel;
private MySeparator separator;
private Color itemTextColor;
private Color separatorTextColor;
private Color itemSelectedBackground;
private Color itemSelectedBorder;
private Font separatorFont;
public MyListRenderer(MyList list) {
super();
itemRender = new JPanel(new BorderLayout());
separatorPanel = new JPanel() {
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
return new Dimension(size.width, separatorHeight);
}
};
//分割Group的样式
separatorLabel = new JLabel();
separator = new MySeparator(0);
separatorTextColor = Color.white;
separatorFont = MyContorlUtil.FONT_12_BOLD;
itemTextColor = MyContorlUtil.LIST_TEXT_COLOR;
itemSelectedBackground = new Color(199, 198, 200);
itemSelectedBorder = new Color(163, 163, 163);
itemRender.setOpaque(false);
itemRender.add(this, "Center");
separatorPanel.setLayout(new OverlayLayout(separatorPanel));
JPanel separatorHelpPane = new JPanel(new BorderLayout());
separatorHelpPane.setBorder(
BorderFactory.createEmptyBorder(12, 0, 0, 0));
separatorHelpPane.add(separator);
separatorHelpPane.setOpaque(false);
separatorPanel.setOpaque(false);
separatorLabel.setOpaque(true);
separatorLabel.setBackground(MyContorlUtil.LIST_BACKGROUND);
separatorLabel.setForeground(separatorTextColor);
separatorLabel.setFont(separatorFont);
separatorLabel.setVerticalAlignment(1);
separatorLabel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
JPanel labelHelpPane = new JPanel(new BorderLayout());
labelHelpPane.setBorder(BorderFactory.createEmptyBorder(6, 15, 0, 0));
labelHelpPane.add(separatorLabel, "West");
labelHelpPane.setOpaque(false);
separatorPanel.add(labelHelpPane);
separatorPanel.add(separatorHelpPane);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected,
boolean cellHasFocus) {
MyShortcutItem shortcutItem = (MyShortcutItem) value;
//Group的渲染
if (shortcutItem.isGroup()) {
String groupName = shortcutItem.getText();
separatorLabel.setText(groupName);
separatorPanel.setToolTipText(groupName);
if (list.getParent() instanceof MyShortcutPanel) {
MyShortcutPanel pane = (MyShortcutPanel) list.getParent();
if (pane.isShrinked()) {
separatorLabel.setText(" ");
separatorLabel.setOpaque(false);
} else {
separatorLabel.setOpaque(true);
}
}
return separatorPanel;
}
//普通Item的渲染
else {
setText(shortcutItem.getText());
setBackground(MyContorlUtil.LIST_BACKGROUND);
setToolTipText(shortcutItem.getToolTip());
setIcon(shortcutItem.getIcon());
}
//判断List的父容器是否是快捷菜单面板,如果是,需要考虑收缩展开的处理
if (list.getParent() instanceof MyShortcutPanel) {
MyShortcutPanel pane = (MyShortcutPanel) list.getParent();
if (pane.isShrinked()) {
setBorder(BorderFactory.createEmptyBorder(2, 7, 1, 2));
setText("");
} else {
setBorder(BorderFactory.createEmptyBorder(2, 20, 1, 2));
}
}
if (isSelected) {
setBackground(itemSelectedBackground);
itemRender.setBorder(
BorderFactory.createLineBorder(itemSelectedBorder));
} else {
itemRender.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
}
setForeground(itemTextColor);
return itemRender;
}
}
|