2

最初のSwingプロジェクトで使用しているこの本当に素晴らしいColorFactoryクラスを見つけました。本当にかっこいいです。たとえば、「クリムゾン」や「ミディアムアクアマリン」など、メインクラスの名前付きの色をcreateContentPane Containerメソッドに渡すことができるようになりました。

コード:

frame.setContentPane(ContentPaneCreator.createContentPane("darkorange"));`

質問:

public final void setBackground(Color color, JPanel contentPane)この方法は必要ですか?createContentPane()代わりに、メソッド内ですべてを実行できますか?ご協力ありがとうございました。

import java.awt.Color;
import java.awt.Container;
import javax.swing.JPanel;

public final class ContentPaneCreator extends JPanel {

    private static final long serialVersionUID = 1L;

    public static Container createContentPane(String color) {

        JPanel contentPane = new JPanel();

        // awesome txt to Color conversions using the ColorFactory().getColor();
        // written by The Lobo Project
        new ContentPaneCreator().setBackground(
                new ColorFactory().getColor(color), contentPane);

        contentPane.setOpaque(true);
        return contentPane;
    }

    public final void setBackground(Color color, JPanel contentPane) {
        contentPane.setBackground(color);
    }
)
4

2 に答える 2

2

いくつかのことが綿密な調査に耐えることができます。

  • 拡張を計画している場合は、コンストラクターを介してJPanelaString colorNameを指定し、後で参照できるように名前をフィールドに格納します。パネルbackgroundColorはバインドされたプロパティです。

  • 静的ファクトリ、、は、初期化オンデマンドホルダーイディオムColorFactory.getInstance()を使用するようにリファクタリングする必要があります。

  • Lobo Projectから抜粋したコードは、その後更新されている可能性があります。

  • 名前標準のようです。

于 2012-07-27T05:26:30.360 に答える
2

あなたの質問への回答-理由がわかりません(または、なぜ最初から始める必要があったのか、干し草です)。

拡張回答:

次のようになります:(同じコードを見ている場合)

ColorFactory.getInstance().getColor(colorName);

それ以外の場合は、インスタンス化ごとにカラーマップを作成しますが、これは無駄です。

また、なぜJPanelを拡張する必要があるのか​​わかりませんが、それは私のコードではありません:P

于 2012-07-27T00:59:29.417 に答える