我试图实现可调整大小的工具提示,但是遇到了一些问题。
当显示工具提示时,文本会更新模型中的更改(使用属性更改侦听器实现)。我现在需要的是,工具提示也会根据文本改变其大小。
尝试revalidate
,doLayout
和repaint
,但没有效果。工具提示不会改变其大小。
只有移动鼠标才能为工具提示中显示的第一个文本提供正确的大小。
有人可以帮忙吗?
以下是一些代码片段:首先是我的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时文本正在改变。数据模型的变化。文本更改正在进行,但工具提示框的大小仍然不正确。
答案 0 :(得分:0)
据我所知,除了移动鼠标外,无法调整大小。但是该组件应该有一个鼠标鼠标移动监听器,所以你要做的就是调用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));
在设置工具提示后调用它,它应该调整大小。