【发布时间】:2012-07-02 21:33:02
【问题描述】:
我目前正在开发一个 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();
}
}
这是我要删除的(白色)背景:
我在 OSX 下运行 java 1.7.0_05。
【问题讨论】:
-
这不是
super.paint画的吗? -
如需尽快获得更好的帮助,请发帖SSCCE。
-
不相关:永远不会在paint/Component中改变组件状态
-
@dacwe 我在测试渲染时留下了
super.paint,不幸的是,删除它没有效果。
标签: java macos swing tooltip paint