我正在尝试为我移植到Java的程序创建自己的自定义工具提示,我正在尝试匹配原始程序ToolTips(它是用Delphi编写的)。我有一些代码允许我在工具提示“内部”绘制,但出于某种原因,如果我覆盖paint(Graphics g, JComponent c)
并将其留空,它仍会绘制工具提示,我尝试绘制的任何内容都将被绘制为“内部“这个小盒装的工具提示,我不能画”外面“。
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicToolTipUI;
class MultiLineToolTipUI extends BasicToolTipUI {
@Override
public void paint(Graphics g, JComponent c) {
//int mY = 0;
//int mX = 0;
//int xPoints[] = {mX, mX, mX + 15};
//int yPoints[] = {mY, mY + 25, mY + 25};
//Polygon p = new Polygon(xPoints, yPoints, 3);
//g.setColor(Color.BLACK);
//g.fillPolygon(p);
//g.fillRoundRect(mX, mY, 100, 50, 30, 30);
}
public static void main (String args[])
{
JButton button = new JButton ("Mouse Over ME!") {
public JToolTip createToolTip() {
MultiLineToolTip tip = new MultiLineToolTip();
tip.setComponent(this);
return tip;
}
};
//JButton button = new JButton("Mouse Over ME!");
button.setToolTipText("Hello, World");
JFrame frame = new JFrame("Basic SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( button );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
static class MultiLineToolTip extends JToolTip
{
public MultiLineToolTip()
{
setUI(new MultiLineToolTipUI());
}
}
}
这就是我所拥有的,就像我说的那样,即使没有paint
中的线条,它也会自行绘制。
有什么建议来解决这个问题吗?或者更好的方式去做我想做的事情?
澄清:Camickr的第一个答案非常有用,但是我应该澄清一下,我的目标是让从paint
以外的某个位置自动绘制的框消失,或者看不见。
答案 0 :(得分:1)
工具提示的大小由文本决定。添加:
System.out.println( c.getSize() );
到paint(...)方法查看工具提示的大小。你试图在界外画画。如果要覆盖默认大小,则需要自己设置首选大小。我想你想要:
public Dimension getPreferredSize(JComponent c)
{
return new Dimension(100, 50);
}
编辑:工具提示是具有边框和背景的组件。如果要删除它们,可以使用:
tip.setOpaque(false);
tip.setBorder(new javax.swing.border.EmptyBorder(0, 0, 0, 0));
这仅适用于工具提示完全包含框架的情况。当工具提示显示在框架的边界之外时,工具提示将添加到JWindow,在这种情况下,您将看到窗口的背景。我不知道如何禁用此行为,因为所有Swing组件都必须在顶级容器的边界内绘制。