0

クラスまたはメンバーの上にカーソルを置いたときに表示されるEclipseのようなスクロールバーを備えた小さなツールチップを実装したいと考えています。

私が抱えている問題は、ツールチップ内にあるスクロール ペイン内のコンポーネントの高さではなく幅のみを制限する方法を見つけることです。コンポーネントは HTML をサポートし、テキストが内側の境界の幅を超えたときにテキストを正しくラップする必要がありますが、私が試したすべてのコンポーネントには、行の折り返しまたは HTML レンダリングのいずれかがあり、両方はありません。

Xが「優先」「最大」「最小」などのすべての「setXSize」には、すべて2つの引数が必要であり、コンポーネントの「setMaxWidth」メソッドがないため、幅のみを制限する方法もどこにもありません。

「setMaximumSize(new Dimension(256, Integer.MAX_VALUE);」を設定することは解決策のように思えますが、「max」と「min」で設定されたパラメーターはほとんどの場合無視されるため、機能しません。これは非常にイライラします。

リクエストに応じて、実装の現在の例:

public class MyTooltip extends JTooltip{
    private JScrollPane scroll;
    private JEditorPane pane;

    public MyTooltip(String htmlCode){
       this.pane = new JEditorPane();
       this.scroll = new JScrollPane(this.pane);
       this.pane.setEditable(false);
       this.pane.setContentType("text/html");
       this.scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

       //Here the problems begin
       this.pane.setMaximumSize(new Dimension(512, Integer.MAX_VALUE));
       this.scroll.setMaximumSize(new Dimension(512, Integer.MAX_VALUE));
       this.pane.setText(htmlCode);

       this.add(scroll);
    }
}
  • 実際のコードはもう少し複雑です。しかし、これは良い近似だと思います...
4

2 に答える 2

1

(コンテンツタイプtext / html)で試しJTextPaneましたか?HTMLEditorKit

それがあなたに必要なことだと思います。

于 2013-03-14T12:10:27.230 に答える
0

問題はすべて解決しました。ユーザーがツールチップに表示する独自のテキストを作成できるようにするというアイデアがありましたが、これには、必要に応じてインデントに複数の「スペース」を使用できるようにすることも含まれていました。

HTMLでこれを意図したとおりにレンダリングするために、すべての「スペース」を置き換えて& nbsp;、文字間のギャップの最適化を実行しませんでしたが、もちろん、自動行折り返しのアルゴリズムでは、単語間の「ギャップ」をラインを壊すのに適した場所。

したがって、実装は実際には意図したとおりに機能し、ツールチップに表示する文字列のみが改行に適していません。

于 2013-03-14T20:56:10.257 に答える