1 | sclass ShadowJLabel extends BetterLabel { |
2 | int tracking; |
3 | |
4 | *() {} |
5 | |
6 | *(S text, int tracking) { |
7 | super(text); |
8 | this.tracking = tracking; |
9 | } |
10 | |
11 | private int left_x, left_y, right_x, right_y; |
12 | private Color left_color, right_color; |
13 | |
14 | public void setLeftShadow(int x, int y, Color color) { |
15 | left_x = x; |
16 | left_y = y; |
17 | left_color = color; |
18 | } |
19 | |
20 | public void setRightShadow(int x, int y, Color color) { |
21 | right_x = x; |
22 | right_y = y; |
23 | right_color = color; |
24 | } |
25 | |
26 | public Dimension getPreferredSize() { |
27 | FontMetrics fm = this.getFontMetrics(getFont()); |
28 | |
29 | int w = totalWidth(); |
30 | int h = fm.getHeight(); |
31 | h += left_y + right_y; |
32 | |
33 | return new Dimension(w,h); |
34 | } |
35 | |
36 | int totalWidth() { |
37 | String text = getText(); |
38 | FontMetrics fm = this.getFontMetrics(getFont()); |
39 | int w = fm.stringWidth(text); |
40 | w += (text.length()-1)*tracking; |
41 | w += left_x + right_x; |
42 | ret w; |
43 | } |
44 | |
45 | public void paintComponent(Graphics g) { |
46 | ((Graphics2D)g).setRenderingHint( |
47 | RenderingHints.KEY_TEXT_ANTIALIASING, |
48 | RenderingHints.VALUE_TEXT_ANTIALIAS_ON); |
49 | char[] chars = getText().toCharArray(); |
50 | |
51 | FontMetrics fm = this.getFontMetrics(getFont()); |
52 | |
53 | int ha = getHorizontalAlignment(); |
54 | int va = getVerticalAlignment(); |
55 | int h = fm.getAscent(); |
56 | if (va == SwingConstants.CENTER) h += (getHeight()-fm.getHeight())/2; |
57 | int x = ha == SwingConstants.CENTER ? (getWidth()-totalWidth())/2 : 0; |
58 | |
59 | for(int i=0; i<chars.length; i++) { |
60 | char ch = chars[i]; |
61 | int w = fm.charWidth(ch) + tracking; |
62 | |
63 | g.setColor(left_color); |
64 | g.drawString(""+chars[i],x-left_x,h-left_y); |
65 | |
66 | g.setColor(right_color); |
67 | g.drawString(""+chars[i],x+right_x,h+right_y); |
68 | |
69 | g.setColor(getForeground()); |
70 | g.drawString(""+chars[i],x,h); |
71 | |
72 | x+=w; |
73 | } |
74 | |
75 | ((Graphics2D)g).setRenderingHint( |
76 | RenderingHints.KEY_TEXT_ANTIALIASING, |
77 | RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); |
78 | |
79 | } // end paintComponent() |
80 | } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1011147 |
Snippet name: | ShadowJLabel |
Eternal ID of this version: | #1011147/9 |
Text MD5: | 2a115e5a56c5626d1bfeb44e0c01270b |
Author: | stefan |
Category: | javax / gui |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2017-10-15 23:42:13 |
Source code size: | 2150 bytes / 80 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 596 / 1224 |
Version history: | 8 change(s) |
Referenced in: | [show references] |