2016-06-26 1 views
1

色とフォントをカスタマイズしたクラスXLabelを作成する必要があります。JLabelの色とフォントをオーバーライドする方法は?

は、私はこれは私がXLabel test= new XLabel("test")コンパイルされませんそれを使用しようとすると、コンストラクタXLabel (String)が定義されていないので、私は、

public class XLabel extends JLabel { 

    @Override 
    public void setFont(Font f) 
     { 
     super.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
     repaint(); 
     } 

    @Override 
    public void setForeground(Color fg) 
     { 
     super.setForeground(Color.PINK); 
     repaint(); 
     }  
} 

しかししようとしたものですすべてJLabelsは、次のような効果

JLabelTest.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
JLabelTest.setForeground(Color.PINK); 

を持っている必要があります。しかし、それはJLabelを拡張するので、すべてのコンストラクタを継承する必要があります。それはなぜですか?カスタマイズされた色とフォントを設定するには?

+0

[Javaコンストラクタの継承]の複製があります。(http://stackoverflow.com/questions/1644317/java-constructor-inheritance) – VGR

答えて

1

これらのメソッドをオーバーライドする必要はありません。 JLabelは抽象クラスなので、XLabelは自動的にそれらのメソッドを継承します。これらのメソッドをXLabelクラスから削除し、コンストラクタでフォアグラウンドとフォントを指定してみます。

public class XLabel extends JLabel { 

public XLabel(String text) { 
    super(text); 
    this.setForeground(Color.BLACK); 
    this.setFont(new Font("Comic Sans MS", Font.BOLD, 20)); 
} 

あなたがXLabelのインスタンスを作成するたびその後、方法setForeground()setFont()が自動的に呼び出されています。これにより、XLabelのインスタンスにはピンクの色が、Comic Sansにはフォントが付きます。

+0

これは私の行うことです。しかし、これは重複したコードになります。それらの 'JLabel'要素が数百個あり、それぞれに対して' setFont'と 'setForeground'があります。 –

+0

ああ。質問にこれらの正確な特性を持つ複数のJLabelが必要であると指定していませんでした。フォントとフォアグラウンドを設定する 'XLabel'のコンストラクタを作成するだけです。正しいコードで回答を更新します。 –

+0

ありがとうございます。私もそれを試みた。このコンストラクタは、引数なしでインスタンス化する場合にのみ有効です。 XLabel test = new XLabel( "test")コンストラクタ 'XLabel(String)is undefined' –

関連する問題