【问题标题】:Swing tooltip resizable可调整大小的 Swing 工具提示
【发布时间】:2012-06-14 14:02:22
【问题描述】:

我尝试实现可调整大小的工具提示,但对此有一些问题。

当显示工具提示时,文本会随着模型中的变化而更新(通过属性更改侦听器实现)。我现在需要的是,工具提示也会根据文本改变其大小。

尝试了revalidatedoLayoutrepaint,但没有效果。工具提示不会改变它的大小。 只有移动鼠标才能为工具提示中显示的第一个文本提供正确的大小。

有人可以帮忙吗?

这里有一些代码 sn-ps:首先是我的 tolltip 类:

public class ResizeableToolTip extends JToolTip {

    public ResizeableToolTip(final JComponent component) {
        super(component);
        initComponents();
    }

    @Override
    protected void initGUI() {
        super.initGUI();
        setLayout(new BorderLayout());
    }

    /**
    * Component initialization goes here...
     */
    private void initComponents() {
        setTipText(getComponent().getToolTipText());
        setPreferredSize(calculateOptimalSize());
    }

    private abstract Dimension calculateOptimalSize();

    @Override
    public void setTipText(String tipText) {
        super.setTipText(tipText);
        setPreferredSize(calculateOptimalSize());
        revalidate();
    }
}

然后我有一个使用此实现的按钮:

public class MyButton extends JButton implements PropertyChangeListener {
    //...
    private ResizeableToolTip tooltip;
    //...
    private initComponents() {
        //...
        tooltip = new ResizeableToolTip(this);
        //...
    }
    //...
    public void propertyChange(final PropertyChangeEvent pcevt) {
        //...
        if (MyButtonModel.TOOLTIPTEXT_PROPERTY.equals(pcevt.getPropertyName()) {
            tooltip.setTiptext((String) pcevt.getNewValue());
            tooltip.repaint();
        }
        //...
    }
    //...
}

结果应该是一个工具提示,当 s.th 时,它会显示在文本正在更改的按钮上。数据模型的变化。文本更改有效,但工具提示框的大小保持错误。

【问题讨论】:

  • 你能分享一个代码或至少一个图像来更好地描述你的问题吗?我不确定我是否得到你的问题。无论如何与to HTML use in JLabel or tool-tip有关吗?
  • 在 JToolTip 中执行布局有点不寻常,see here 我只是使用常规的 JToolTip 并在其中设置一些 html 文本。它将为给定的 html 重新调整大小。 Ballon tip project 你可能也有运气
  • 试过了,但它不会自行调整大小。仅当工具提示可见时,它的大小取决于工具提示中的文本。如果显示工具提示的时间片中的文本发生变化,则工具提示将保持其大小,即使文本也需要更多空间:-(,

标签: swing resize tooltip


【解决方案1】:

据我所知,除了移动鼠标之外,没有办法调整它的大小。然而,组件应该有一个鼠标运动监听器,所以你所要做的就是调用 mouseMoved ,它会认为鼠标已经移动并调整工具提示的大小。

//comp will be whatever component your tooltip is on
if(comp.getMouseMotionListeners().length > 0)comp.getMouseMotionListeners()[0].mouseMoved(new MouseEvent(inst, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y, 0, false));

在设置工具提示后调用它,它应该会调整大小。

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2010-09-27
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多