1

サイズ変更可能なツールチップを実装しようとしましたが、これにはいくつかの問題があります。

ツールチップが表示されると、モデルの変更時にテキストが更新されます (プロパティ変更リスナーで実装されます)。私が今必要としているのは、テキストに応じてツールチップのサイズも変更することです。

を試しましたが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 のときにテキストが変化するボタンの上に表示されるツールチップになります。データモデルの変更。テキストの変更は機能していますが、ツールチップのボックスのサイズが間違ったサイズのままです。

4

1 に答える 1

0

私が知る限り、マウスを動かす以外にサイズを変更する方法はありません。ただし、コンポーネントにはマウス マウス モーション リスナーが 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));

ツールチップを設定した後にそれを呼び出すだけで、サイズが変更されます。

于 2014-12-04T18:31:20.953 に答える