Java/Swing - 工具提示矩形

标签 java macos swing tooltip paint

我目前正在开发一个 java/swing 项目,并且我陷入了定制过程。
我已延长 JToolTip并重写了paint()方法来绘制我自己的工具提示,但我无法删除工具提示周围的背景。

这是 paint() 重写:

/* (non-Javadoc)
 * @see javax.swing.JComponent#paint(java.awt.Graphics)
 */
@Override
public void paint(Graphics g) {     
    String text = getComponent().getToolTipText();

    if (text != null && text.trim().length() > 0) {
        // set the parent to not be opaque
        Component parent = this.getParent();
        if (parent != null) {
            if (parent instanceof JComponent) {
                JComponent jparent = (JComponent) parent;
                if (jparent.isOpaque()) {
                    jparent.setOpaque(false);
                }
            }
        }

        // create a round rectangle
        Shape round = new RoundRectangle2D.Float(4, 4, this.getWidth() - 1 - 8, this.getHeight() - 1 - 8, 8, 8);

        // draw the background
        Graphics2D g2 = (Graphics2D) g.create();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(getBackground());
        g2.fill(round);

        // draw the left triangle
        Point p1 = new Point(4, 10);
        Point p2 = new Point(4, 20);
        Point p3 = new Point(0, 15);
        int[] xs = {p1.x, p2.x, p3.x};
        int[] ys = {p1.y, p2.y, p3.y};
        Polygon triangle = new Polygon(xs, ys, xs.length);
        g2.fillPolygon(triangle);

        // draw the text
        int cHeight = getComponent().getHeight();
        FontMetrics fm = g2.getFontMetrics();
        g2.setColor(getForeground());
        if (cHeight > getHeight())
            g2.drawString(text, 10, (getHeight() + fm.getAscent()) / 2);
        else
            g2.drawString(text, 10, (cHeight + fm.getAscent()) / 2);

        g2.dispose();
    }
}

这是我要删除的(白色)背景:
enter image description here

我在 OSX 下运行 java 1.7.0_05。

最佳答案

这可能是因为您调用super.paint之后将父级设置为不透明。 另外,您是否在 JToolTip 上调用了 setOpaque ? 最后,您可以在 addNotify 中执行所有操作,而不是在每次抽奖时执行代码:

public void addNotify() {
    super.addNotify();
    setOpaque(false);
    Component parent = this.getParent();
    if (parent != null) {
        if (parent instanceof JComponent) {
            JComponent jparent = (JComponent) parent;
            jparent.setOpaque(false);
        }
    }
}

关于Java/Swing - 工具提示矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301503/

相关文章:

java - 单链表怎么会有两个头,找到它们的 "common node"是什么意思?

java - Maven Spring 3 动态应用程序中的错误

java - 了解Gradle项目的依赖性,Gradle站点示例似乎不完整

python - 尝试使用brew链接python时出现"Permission denied"

java - 如何删除 JTable Java 中的空行

java - JFormattedTextField: 格式化文本到没有空格的数字

java - Terracotta 工具包缺少类会阻止 EHCache 启动

swift - 使用 Swift 在 macOS 上修改辅助功能设置

java - 如何在 Mac OS 中为 Java 配置 PATH 和 CLASSPATH

java - Swing CardLayout 运行时错误