Levy.Xie-解安森
10 months ago
4 changed files with 120 additions and 31 deletions
@ -0,0 +1,73 @@
|
||||
package com.fine.theme.light.ui; |
||||
|
||||
import com.fr.design.gui.icontainer.UIScrollPane; |
||||
|
||||
import javax.swing.JComponent; |
||||
import javax.swing.JLayer; |
||||
import javax.swing.JScrollPane; |
||||
import javax.swing.ScrollPaneConstants; |
||||
import javax.swing.plaf.LayerUI; |
||||
import java.awt.AWTEvent; |
||||
import java.awt.Component; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* 滚动面板的装饰层UI,支持滚动条仅当悬浮时显示 |
||||
* 使用见工具类: {@link com.fine.theme.utils.FineUIUtils#createCollapsibleScrollBarLayer(Component)} |
||||
* |
||||
* @author Levy.Xie |
||||
* @since 11.0 |
||||
* Created on 2024/01/25 |
||||
*/ |
||||
public class CollapsibleScrollBarLayerUI extends LayerUI<UIScrollPane> { |
||||
private final int verticalPolicy; |
||||
private final int horizontalPolicy; |
||||
|
||||
public CollapsibleScrollBarLayerUI() { |
||||
this(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); |
||||
} |
||||
|
||||
public CollapsibleScrollBarLayerUI(int verticalPolicy, int horizontalPolicy) { |
||||
this.verticalPolicy = verticalPolicy; |
||||
this.horizontalPolicy = horizontalPolicy; |
||||
} |
||||
|
||||
@Override |
||||
public void installUI(JComponent c) { |
||||
super.installUI(c); |
||||
if (c instanceof JLayer) { |
||||
((JLayer<?>) c).setLayerEventMask(AWTEvent.MOUSE_EVENT_MASK); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void uninstallUI(JComponent c) { |
||||
if (c instanceof JLayer) { |
||||
((JLayer<?>) c).setLayerEventMask(0); |
||||
} |
||||
super.uninstallUI(c); |
||||
} |
||||
|
||||
@Override |
||||
protected void processMouseEvent(MouseEvent e, JLayer<? extends UIScrollPane> l) { |
||||
JScrollPane view = l.getView(); |
||||
switch (e.getID()) { |
||||
case MouseEvent.MOUSE_ENTERED: |
||||
// 在鼠标进入时恢复滚动条显示策略
|
||||
if (view != null) { |
||||
view.setVerticalScrollBarPolicy(verticalPolicy); |
||||
view.setHorizontalScrollBarPolicy(horizontalPolicy); |
||||
} |
||||
break; |
||||
case MouseEvent.MOUSE_EXITED: |
||||
// 在鼠标退出时隐藏滚动条
|
||||
if (view != null) { |
||||
view.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); |
||||
view.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); |
||||
} |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue