HTMLEditorKit
いくつかのカスタムHTMLタグを表示するために、(および他の関連するクラスの)サブクラスを作成したとしましょう。JLabel
これらのカスタムタグを、、などで使用できるようにしたいと思いますJButton
。独自のルックアンドフィールを作成する以外に、これを行う方法はありますか?つまり、現在使用されているルックアンドフィールに関係なく、swingに「/etcHTMLEditorKit
でHTMLをレンダリングするためにこのインスタンスを使用する」ことを伝えたいと思います。JLabel
Swingの内部で行ったちょっとした突っ込みから、それは不可能だと思いますが、間違っていることが証明されることを望んでいます。
3 に答える
それは行うことができます:
javax.swing.plaf.basic.BasicLabelUI
重要なのは、ラベルの基本的な UI であるクラスにあります。
paint メソッドでは、次のコードを確認できます。
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, paintTextR);
}
BasicHTML クラスは Java の HTML 機能の提供者であるため、理論的には、クライアント プロパティをBasicHTML.propertyKey
View の独自の実装に置き換えると、そのクラスが使用され、テキストをレンダリングするために必要なことは何でも実行できます。
このクラスjavax.swing.plaf.basic.BasicLabelUI
は、他のほとんどの LAF ラベル UI の親ですが、すべてではないため、すべての LAF で機能するとは限りません。クラスを使用する HTML をサポートしない LAF もBasicHTML
、修正では機能しません。
しかし、これは機能というよりハックです。インターフェイスではなく、実装に対してプログラミングしています。したがって、それを行う深刻な理由がない場合は、JLabel サブクラスなど、カスタム HTML をレンダリングするためのよりクリーンな方法を見つけることをお勧めします。
正常にできません。。。JLabel
とクラスを拡張すればJButton
可能かもしれませんが、もっと良い方法があるため、これらは大変な作業のようです[1]。しかし、便利なクラスになります。
[1]:テキストを動的にする必要がない場合は、で画像を使用してみてくださいJImagesIcons
。