admin管理员组文章数量:1123004
swing
tooltip 可以对一些操作的进一步说明,h5中常用的title属性属于最简单的tooltip,但是在更多的框架中为了美观,会有tooltip插件, 可以实现更漂亮的tooltip . swing可以扩展JToolTip类实现更美观的提示框.
swing实现tooltip
- 继承JTooltip类
- 重写updateUI方法
- 重写paintComponent 自定义形状和背景色
- 重写setTipText 自定义前景色
总结
- ToolTipManager 可以对tooltip显示的速度设置
- new JButton时 可以直接覆写默认方法
测试代码
import com.formdev.flatlaf.FlatLightLaf;
import com.mynote.core.ui.ColorBuilder;
import com.mynote.core.util.FrameUtil;
import com.mynote.example.demo.AbstractDefaultPanel;
import net.miginfocom.swing.MigLayout;import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.basic.BasicButtonUI;
import java.awt.*;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.geom.Area;
import java.awt.geom.Path2D;
import java.awt.geom.RoundRectangle2D;
import java.util.Optional;/*** 修改tooltip*/
public class ToolTipTest extends AbstractDefaultPanel {private JButton defaultToolTip;private JButton defineToolTip;@Overrideprotected void init() {// 全局tooltip 显示速度设置ToolTipManager toolTipManager = ToolTipManager.sharedInstance();
// toolTipManager.setDismissDelay(2000);toolTipManager.setInitialDelay(100);defaultToolTip = new JButton("defaultToolTip");defaultToolTip.setToolTipText("默认提示");// 自定义tooltipdefineToolTip = new JButton("defineToolTip") {@Overridepublic JToolTip createToolTip() {return new BalloonToolTip(ColorBuilder.BG_BLANK_COLOR1, Color.WHITE);}};defineToolTip.setToolTipText("自定义提示样式");}@Overrideprotected void render() {view.setLayout(new MigLayout("wrap 1,center"));super.createViewRow(new JLabel("default tooltip 消息:"), defaultToolTip);super.createViewRow(new JLabel("define tooltip 消息:"), defineToolTip);super.add(view);}@Overrideprotected void bindEvents() {}public static void main(String[] args) {FlatLightLaf.install();FrameUtil.launchTest(new ToolTipTest());}private class BalloonToolTip extends JToolTip {private static final long serialVersionUID = 1L;private transient HierarchyListener listener;/*** 背景色*/private Color bgColor;/*** 前景色*/private Color fgColor;public BalloonToolTip(Color bgColor, Color fgColor) {this.bgColor = bgColor;this.fgColor = fgColor;}@Overridepublic void updateUI() {removeHierarchyListener(listener);super.updateUI();listener = e -> {Component c = e.getComponent();if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && c.isShowing()) {Optional.ofNullable(SwingUtilities.getRoot(c)).filter(JWindow.class::isInstance).map(JWindow.class::cast).ifPresent(w -> w.setBackground(new Color(0x0, true)));}};addHierarchyListener(listener);setOpaque(false);setBorder(BorderFactory.createEmptyBorder(8, 5, 0, 5));}@Overridepublic Dimension getPreferredSize() {Dimension d = super.getPreferredSize();d.height = 35;return d;}@Overrideprotected void paintComponent(Graphics g) {Shape s = makeBalloonShape();Graphics2D g2 = (Graphics2D) g.create();g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2.setColor(bgColor);g2.fill(s);g2.setColor(bgColor);g2.draw(s);g2.dispose();super.paintComponent(g);}private Shape makeBalloonShape() {Insets i = getInsets();float w = getWidth() - 1f;float h = getHeight() - 1f;float v = i.top * .5f;Path2D triangle = new Path2D.Float();triangle.moveTo(i.left + v + v, 0f);triangle.lineTo(i.left + v, v);triangle.lineTo(i.left + v + v + v, v);Area area = new Area(new RoundRectangle2D.Float(0f, v, w, h - i.bottom - v, i.top, i.top));area.add(new Area(triangle));return area;}@Overridepublic void setTipText(String tipText) {super.setForeground(fgColor);super.setTipText(tipText);}}
}
本文标签: swing
版权声明:本文标题:swing 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1687090847a62790.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论