Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Swing-工具提示矩形_Java_Macos_Swing_Tooltip_Paint - Fatal编程技术网

Java/Swing-工具提示矩形

Java/Swing-工具提示矩形,java,macos,swing,tooltip,paint,Java,Macos,Swing,Tooltip,Paint,我目前正在开发一个java/swing项目,我正陷入定制过程中。 我已经扩展并重写了paint()方法来绘制我自己的工具提示,但是我无法删除工具提示周围的背景 以下是paint()覆盖: /* (non-Javadoc) * @see javax.swing.JComponent#paint(java.awt.Graphics) */ @Override public void paint(Graphics g) { String text = getComponent()

我目前正在开发一个java/swing项目,我正陷入定制过程中。
我已经扩展并重写了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();
    }
}
以下是我要删除的(白色)背景:


我正在OSX下运行Java1.7.005

这可能是因为您在调用super.paint后将父对象设置为不透明。 另外,您是否在JToolTip上调用了set不透明? 最后,您可以在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);
        }
    }
}

存在一个问题,即默认情况下,所有组件都具有矩形形状-如果要为工具提示构建自己的
形状
,则必须将其设置为:

Shape circle = new Ellipse2D.Float(-1.0f,-1.0f, 36.0f, 36.0f);
tooltip.setShape(circle);

这不是由
super.paint
绘制的吗?为了更快地获得更好的帮助,请发布一个.unrelated:永远不要更改绘制中的组件状态/Component@dacwe当我测试渲染时,我把
super.paint
留在那里,很遗憾,移除它没有效果。谢谢@marco,但这并没有解决问题。无论如何,我现在使用addnotify()设置父对象的不透明值,谢谢!