2011-08-04 7 views
2

私は同じ境界線を持つ10個のJLabelsを持っています。これは手で管理できる数字ですが、プログラマーとして成長するためには、これを簡単にする方法があるかどうかを知りたいのです。複数のJLabelに境界を設定する

ラベルが付いているパネルのすべてのコンポーネントに対応するループごとにaを試してから、setBorder(...)というメソッドを使用しました。しかし、オブジェクトはJLabelの代わりにComponentとして認識されるため、これは明らかに機能しません。

境界割り当てをJLabelに自動化するにはどうすればよいですか?

答えて

10

@Atreysが提供する答えは十分ですが、に複数の方法があります猫の皮膚には。別のオプションは、JLabelを拡張し、そのコンストラクタ内に境界を割り当てるクラスを作成することです。したがって、すべてのインスタンスは、要求に応じて同じ境界線を持ちます。これにより、Componentのコレクションに対して不器用に反復する必要がなくなり、instanceof演算子を使用してから実際にOOPでない型キャストを使用します。


public final class BorderedJLabel extends JLabel{ 
    public BorderedJLabel(){ 
     // assign border 
    } 
} 

補遺:

そして、あなたはそれぞれの新しいBorderedJLabelインスタンスのnew BorderedJLabel()を入力することの冗長性を避けたかったならば、あなたのような、staticファクトリメソッドを熟読でき

public final class BorderedJLabel extends JLabel{ 
    private BorderedJLabel(){ 
     // assign border 
    } 

    public static final BorderedJLabel newInstance(){ 
     return new BorderedJLabel(); 
    } 
} 

このデザインでは、単にBorderedJLabel.newInstance()と入力すると、新しいBorderedJLabelインスタンスをより簡潔に作成することができます。

+1

JLabelを構築するあらゆる方法で、MyJLabelを構築する適切な方法を追加する必要があります。これは、問題を解決するためのよりOOPの方法ですが、潜在的にはより多くの作業を必要とし、MyJLabelクラスを忘れてJLabelを「間違って」使用すると、境界が設定されません。 – Atreys

+2

+1:このアプローチでは、あなたのコンポーネントにも同様に 'JLabel'という文字列を持たせることができます。 – pmnt

+0

正しい提案+1 – mKorbel

4

あなたには、ほぼ解決策があるようです。

パネルのすべてのコンポーネントを繰り返し処理し、もう1つはJLabelのであれば、それをキャストし、境界線を設定します。

for (Component comp : componentList) { 
    if (comp instanceof JLabel) { 
     ((JLabel)comp).setBorder(myBorder()); 
    } 
} 
+0

ああ、キャストが欠落していました。どうもありがとうございました! – Patrick

+0

私はあなたが私に元々それを修正したいと思っていた欠けている部分を手渡したので、あなたの答えも好きです。 – Patrick

関連する問題