7
7
import javax .swing .UIManager ;
8
8
import javax .swing .plaf .ComponentUI ;
9
9
import javax .swing .plaf .basic .BasicTabbedPaneUI ;
10
- import java .awt .Graphics ;
11
- import java .awt .Rectangle ;
10
+ import java .awt .*;
11
+ import java .awt .event .MouseEvent ;
12
+ import java .awt .event .MouseMotionListener ;
12
13
13
14
public class MaterialTabbedPaneUI extends BasicTabbedPaneUI {
14
15
15
16
public static ComponentUI createUI (JComponent c ) {
16
17
return new MaterialTabbedPaneUI ();
17
18
}
18
19
20
+ private JComponent component ;
21
+
19
22
@ Override
20
23
public void installUI (JComponent c ) {
21
24
super .installUI (c );
@@ -30,6 +33,8 @@ public void installUI (JComponent c) {
30
33
darkShadow = UIManager .getColor ("TabbedPane.darkShadow" );
31
34
shadow = UIManager .getColor ("TabbedPane.shadow" );
32
35
lightHighlight = UIManager .getColor ("TabbedPane.highlight" );
36
+
37
+ component = tabbedPane ;
33
38
}
34
39
35
40
@ Override
@@ -58,5 +63,35 @@ protected void paintFocusIndicator (Graphics g, int tabPlacement, Rectangle[] re
58
63
protected void paintTab (Graphics g , int tabPlacement , Rectangle [] rects , int tabIndex , Rectangle iconRect , Rectangle textRect ) {
59
64
// for some reason tabs aren't painted properly by paint()
60
65
super .paintTab (MaterialDrawingUtils .getAliasedGraphics (g ), tabPlacement , rects , tabIndex , iconRect , textRect );
66
+ component .addMouseMotionListener (new MouseHoverTab (rects ));
67
+ }
68
+
69
+ private class MouseHoverTab implements MouseMotionListener {
70
+
71
+ private Rectangle [] rectangles ;
72
+
73
+ public MouseHoverTab (Rectangle [] rectangles ) {
74
+ this .rectangles = rectangles ;
75
+ }
76
+
77
+ @ Override
78
+ public void mouseDragged (MouseEvent e ) {
79
+ }
80
+
81
+ @ Override
82
+ public void mouseMoved (MouseEvent e ) {
83
+ JComponent mouseGenerate = (JComponent ) e .getSource ();
84
+ if (!mouseGenerate .isEnabled ()) {
85
+ return ;
86
+ }
87
+ Point point = e .getPoint ();
88
+ for (Rectangle r : rectangles ) {
89
+ if (r .contains (point )) {
90
+ mouseGenerate .setCursor (Cursor .getPredefinedCursor (Cursor .HAND_CURSOR ));
91
+ return ;
92
+ }
93
+ }
94
+ mouseGenerate .setCursor (Cursor .getPredefinedCursor (Cursor .DEFAULT_CURSOR ));
95
+ }
61
96
}
62
97
}
0 commit comments