10

JLabelHTML 文字列をグレー表示するにはどうすればよいですか(これは、 JLabelHTML テキストを表示しない の動作です)。プロパティを変更して実際に自分で色を変更する以外の方法はありforegroundますか?

JLabel label1 = new JLabel("Normal text");
JLabel label2 = new JLabel("<html>HTML <b>text</b>");
// Both labels are now black in colour

label1.setEnabled(false);
label2.setEnabled(false);
// label1 is greyed out, label2 is still black in colour

たくさんのご回答ありがとうございました。JLabel私が収集したところによると、 HTML テキストを使用する場合、Java は s の自動グレー表示をサポートしていないようです。Suraj のソリューションは、制限を考慮して修正に最も近いものになりました。

ただし、別のすぐに使用できるアプローチを試しました。ここでは、HTML テキストJLabelをインナーの中に入れて、JPanelこれを行いました。

mInnerPanel.setEnabled(shouldShow); //shouldShow is a boolean value

これはうまくいきませんでした。この方法に関する提案はありますか?


編集:実装されたソリューションを追加しました。

4

5 に答える 5

10

テキストが HTML の場合、次のコードにより、テキストはグレー表示されません。BasicLabelUI#paint()

        View v = (View) c.getClientProperty(BasicHTML.propertyKey);
        if (v != null) {
        v.paint(g, paintTextR);
        }

テキストが html であるかどうかを見るとわかるように、View を使用してペイントし、ラベルが有効かどうかはチェックされません。したがって、以下に示すように明示的に行う必要があります。

label2.addPropertyChangeListener(new PropertyChangeListener() {
   public void propertyChange(PropertyChangeEvent evt) {
    if (!evt.getPropertyName().equals("enabled"))
     return;
    if (evt.getNewValue().equals(Boolean.FALSE))
     label2.setText("<html><font color=gray>HTML <b>text</b></html>");
    else
     label2.setText("<html><font color=black>HTML <b>text</b></html>");
   }
  });
于 2010-02-11T06:01:25.850 に答える
5

実装されたソリューション:

    Color foreground = (shouldShow) ? SystemColor.textText : SystemColor.textInactiveText;
    for (Component comp : mInnerPanel.getComponents())
    {
        comp.setForeground(foreground);
    }

HTMLテキストが含まれている限り、Javaはペイント時にプロパティsetForegroundを明示的に無視しているように見えるため、最後に陥没して使用されました。「純粋な」解決策については、@Surajの回答も参照してください。enabledJLabel

于 2010-02-12T01:24:07.040 に答える
3

ここで提供される2つのソリューションの組み合わせである、次のことをお勧めします。

public class HtmlLabel extends JLabel{
    public void setEnabled(boolean enabled){
        if(getClientProperty(BasicHTML.propertyKey) != null ){
            Color foreground = (enabled) ? SystemColor.textText : SystemColor.textInactiveText;
            setForeground(foreground);
        }
        super.setEnabled(enabled);
    }
}
于 2011-01-18T16:20:02.813 に答える
0

UI で paint メソッドをオーバーライドし、無効になっている場合はクライアント プロパティBasicHTML.propertyKeyを null に設定し、super... を呼び出します。

于 2010-02-11T08:44:36.800 に答える
0

HTML でフォントの色を指定できます。

于 2010-02-11T05:52:24.540 に答える