10

スイングを使ったストリング・イム・ドローイングの1つの作品に重点を置いています。

次のコードでHTMLを使用するようにアドバイスされました。

Graphics2D g2 = (Graphics2D) g;
g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);

私はこれを試しましたが、運がありませんでした...それはHTMLを出力するだけです

誰かが私を正しい方向に向けることができますか?

4

6 に答える 6

13
  • これはどのようにコンパイルされますか: ' " ' は特殊文字であるため、 \g.drawString("this is something I want people to <p color="#00FF00">NOTICE</p>", x, y);でエスケープする必要があります

  • Graphics2D にキャストしますが、使用しません (問題には関係ありませんが、異常を引き起こす可能性があります)。

そのはず:

Graphics2D g2 = (Graphics2D) g;
g2.drawString("this is something I want people to <p color=\"#00FF00\">NOTICE</p>", x, y);

色を追加するには、単にs オブジェクトsetColor(Color c)を呼び出します:Graphic

g2.setColor(Color.GREEN);

JLabelただし、HTML サポート (HTML3.2 まで) を使用して一部のみを緑色で描画する場合は、文字列全体を緑色で描画するように設定します。

JLabel label = new JLabel("<html>this is something I want people to <p color=\"#00FF00\">NOTICE</p></html>");

完全な例:

ここに画像の説明を入力

:ご覧のとおり、通知は独自の行にありますが、これは段落タグが原因で、次のようにフォントタグを使用して 1 行で表示するのではなく、次のようになります。

ここに画像の説明を入力

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("<html>this is something I want people to <p color=\"#00FF00\">NOTICE</p></html>");

        // JLabel label = new JLabel("<html>this is something I want people to <font color=\"#00FF00\">NOTICE</font></html>");//will be shown on single line

        frame.add(label);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}
于 2012-12-10T13:31:44.630 に答える
4

Graphics.setColor()を使用して、実行するすべての色を変更します。または、 a を使用しJLabelて色をオンに設定します。

于 2012-12-10T13:26:09.020 に答える
4

JLabelスタイル付きテキストには a を使用します。画像に描画してペイントで使用する方法については、LabelRenderTestを参照してください。

Graphics/AWT メソッドの使用

文字列は緑であることを意味NOTICEしますが、残りはデフォルト (黒) です。文字列の 2 つの部分の色で 2 回呼び出す必要がありdrawString(String)、後者の文字列を最初の部分の幅だけオフセットします。幅を取得するには、 や などを参照してFontMetricsくださいGlyphVectorこの回答では、 a を使用しGlyphVectorて文字のアウトラインを取得しています。

于 2012-12-10T13:26:14.723 に答える
3

単語に重点を置いた単純なラベルを作成するだけの場合は、このように HTML を直接割り当てることができますJLabel...

JLabel label = new JLabel("<html>this is something I want people to <p color='#00FF00'>NOTICE</p>");

<html>の文字列の先頭にピースがある限りJLabel、HTML レンダラーを使用してペイントします。

ただし、@AndrewThompsonが指摘したように<p>、色付きのテキストを新しい行に強制するため、おそらく<span>より適切です...

JLabel label = new JLabel("<html>this is something I want people to <span style='color:#00FF00;'>NOTICE</span>");
于 2012-12-10T13:24:09.697 に答える
2

g.drawString() の前に g.setColor(Color.BLUE) を使用できます。(例: Color.BLUE)

于 2012-12-10T13:32:34.723 に答える
-2

g.setColor(Color.Chosen Color); を追加してから、おそらく g.drawString() で文字列を書き出すことができます

于 2014-02-03T23:47:29.847 に答える