サイズ変更可能なツールチップを実装しようとしましたが、これにはいくつかの問題があります。
ツールチップが表示されると、モデルの変更時にテキストが更新されます (プロパティ変更リスナーで実装されます)。私が今必要としているのは、テキストに応じてツールチップのサイズも変更することです。
を試しましたが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 のときにテキストが変化するボタンの上に表示されるツールチップになります。データモデルの変更。テキストの変更は機能していますが、ツールチップのボックスのサイズが間違ったサイズのままです。