1

JButton のカスタマイズについて助けが必要です。

そのために次の拡張メソッドを使用しています...ボタンに背景色を追加する必要があり、ボタンの2つの場所(左上と中央)に2つの異なるテキストを配置する必要があります

私のコードは、両方のシナリオ (色とテキストの位置) をサポートできません。テキストを配置するか、BG の色を取得することができます。現在のコードでは、BGの色を取得していますが、テキストが表示されません

protected void paintComponent(Graphics g) {
        g.setColor( color);
        g.fillRect(0, 0, getSize().width, getSize().height);
        super.paintComponent(g);
        setPreferredSize(new Dimension(47, 33));

        if (isHeader) {
            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
            //setBackground(color);

        } else {
            g.setFont(new Font("Arial", Font.PLAIN, 9));
            g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);

        }
        super.paintComponent(g);
        setContentAreaFilled(false);
        g.finalize();
    }
4

1 に答える 1

1

一見すると文字を描いているように見えますが、背景と同じ色で描いているので見えません。黒の背景に黒のテキストはただの黒です。

テキストと背景に別の色が必要です。何かのようなもの;

protected void paintComponent(Graphics g) {
    g.setColor(backgroundColor);
    g.fillRect(0, 0, getSize().width, getSize().height);
    super.paintComponent(g);
    setPreferredSize(new Dimension(47, 33));

    g.setColor(textColor); //set the text color before drawing the text
    if (isHeader) {
        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
    } else {
        g.setFont(new Font("Arial", Font.PLAIN, 9));
        g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);
    }
    super.paintComponent(g);
    setContentAreaFilled(false);
    g.finalize();
}

これらは、コード内の他のいくつかのおかしなもののようです。なぜ使わないのにsetBackground()、なぜ二度電話するのsuper.paintComponent()ですか?

編集: また、ペイント メソッドでコンポーネントのサイズを設定するのはなぜですか? それは間違っているようです。そして、なぜオブジェクトを呼び出しfinalize()ているのですか?Graphics

于 2011-08-05T09:23:53.323 に答える