2011-01-24 81 views
2

我一直跑到我班上的'找不到符號'錯誤。該變量在超類中明確聲明,但子類無法看到它。除了子類RecordViewer中的JLabel的新構造函數外,我不會收到任何錯誤。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()]); 

預定義的toString從我CDinventoryItem類...

 @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 2011-01-24 20:39:10

回答

3

這是標準的Java JLabel嗎?您試圖傳遞CDinventoryItem類型的對象,並且JLabel將不具有處理該類型參數的構造函數,除非它擴展了String或Icon類。

2
  • 組織你的進口,使JLabel正常
  • JLabel進口沒有定義構造函數把你的自定義類型。你需要在那裏傳遞一個字符串。
+0

是的,我有導入javax.swing。*;在頂部。我剛剛添加了導入javax.swing.JLabel;如你所建議的。仍然沒有變化。 – user569127 2011-01-24 20:35:05

+0

@ user569127是否使用IDE? – Bozho 2011-01-24 20:37:39

+0

是的,我正在使用NetBeans – user569127 2011-01-24 20:42:48

0

只是一個猜測,但你的問題的措辭意味着你想直接從一個子類使用私人領域?除了聲明它們的類外,其他任何地方都不能看到私有字段,包括同一繼承層次結構中的類。你可以把它保護起來,但是這是被忽視的 - 更好的是提供一個mutator方法來標記或者更好,然後在超類的構造函數中初始化它。