2011-01-24 11 views
2

私のクラスで 'シンボルを見つけることができません'というエラーが発生しています。変数はスーパークラスではっきりと宣言されていますが、サブクラスはそれを見ることができません。サブクラスRecordViewerJLabelという新しいコンストラクタ以外はエラーが発生しません。Javaクラスのサブクラス変数参照

class RecordViewer extends JDialog{ 
    private JButton next; 
    private JButton prev; 
    private JLabel label; 
    private int current; 

    public RecordViewer(CDinventoryItem [] array){ 
     super(); 
     current = 0; 
     final CDinventoryItem [] items = array; 

     label = new JLabel(items[getCurrent()]); 

私CDinventoryItemクラスから定義済みのtoStringは...

 @Override public String toString(){ 

     // Decimal foramting for the inventory values 
     NumberFormat dformat = new DecimalFormat("#0.00"); 

     // Formatting for the inventory output 
     StringBuilder ouput = new StringBuilder(); 
     String New_Line = System.getProperty("line.separator"); 

      ouput.append("The product number of my CD is: ").append(iPitemNumber).append (New_Line); 
      ouput.append("The title of the CD is: ").append(sPtitle).append (New_Line); 
      ouput.append("I have ").append(iPnumberofUnits).append(" units in stock.").append (New_Line); 
      ouput.append("The total value of my inventory on this product is: ").append(dformat.format(stockValue())).append (New_Line); 
      return ouput.toString(); 
     } 
+1

エラーメッセージ全体を入力してください。 – adamax

答えて

3

これは標準Java JLabelですか? CDinventoryItem型のオブジェクトを渡そうとしていて、StringクラスまたはIconクラスを拡張していない限り、JLabelはその種の引数を処理するコンストラクタを持ちません。

+0

はい、標準のJLabelです。 CDinventoryクラスはString、int、int、doubleの配列です – user569127

+0

したがって、StringクラスまたはIconクラスは拡張されません。その後、コンストラクタは動作しません。 extendは、String変数/ Stringの配列をメンバフィールドとして持つことを意味するわけではありません。これは、クラス宣言でキーワードkeywordを使用したことを意味します。 CDinventoryはStringのサブクラスになります。おそらく、あなたがしようとしていることではないかもしれません。おそらく、項目[getCurrent()]。getName()を引数として使用したい場合があります。ここで、getNameはStringを返すメソッドです。 – Jems

+0

+1(15hcrs ....) – Bozho

2
  • JLabelが正しく
  • JLabelインポートされたカスタムタイプを取るコンストラクタを定義しないように、あなたの輸入を整理します。そこに文字列を渡す必要があります。
+0

はいインポートがあります。javax.swing。*;頂点で。私は、インポートjavax.swing.JLabelを追加しました。あなたが提案した通りです。まだ変更はありません。 – user569127

+0

@ user569127 IDEを使用していますか? – Bozho

+0

はいNetBeansを使用しています – user569127

0

あなたの疑問文句は、サブクラスから直接プライベートフィールドを使用しようとしていることを意味しますか?プライベートフィールドは、同じ継承階層のクラスを含め、宣言されているクラス以外の場所には表示されません。あなたはそれを保護させることができますが、これは面倒です。ラベルを付けるためのミューテータメソッドを提供するか、それよりも上手にスーパークラスコンストラクタで初期化する方がよいでしょう。

+0

スーパークラスで初期化しても、表示されません。私が試した最初のものの1つでした。 – user569127

+0

OK a label = this.setLabel(items [Current()]);エラーを削除しました。 NetBeansにsetLabelのメソッドを作成させます。 – user569127

関連する問題