gpt4 book ai didi

java - 如何绘制自己的工具提示来代替 Swing 组件的默认工具提示?

转载 作者:行者123 更新时间:2023-12-01 16:01:37 26 4
gpt4 key购买 nike

我正在尝试为已移植到 Java 的程序创建自己的自定义工具提示,我正在尝试匹配原始程序的工具提示(它是用 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 之外的某个位置自动绘制的框消失,或者不可见。

最佳答案

工具提示的大小由文本决定。添加:

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 组件都必须在顶级容器的边界内绘制。

关于java - 如何绘制自己的工具提示来代替 Swing 组件的默认工具提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com