2010-08-25 81 views
1

我正在開發一個項目,其中有一個名爲HGraphic的類,它擴展了JPanel。這個類有一個名爲updateNum的公共方法,它接收一個整數作爲參數,並對它做一些工作,更新一些元素。Swing - 擴展JPanel類的方法和屬性無法從JFrame訪問

這個HGprahic類在我的項目的主類中有一個實例(主類擴展了JFrame)...我需要從發送變量作爲參數的主類調用HGraphic的這個特定方法。

問題是,雖然該方法被宣佈爲公共,但我無法像正常情況下那樣執行正常的hGraphicInstance.method(變量)操作。

我已經通過JPanel文檔,但沒有發現任何地方說你不能訪問自定義方法......或者你不能創建setters(另一種做我需要的方法)。

當我實例化HGraphic類時,我使用JComponent類來完成它,這可能是原因嗎?

你有什麼想法或建議嗎?我真的很感激在這件事情上的一點點光。感謝非常多!

我把代碼的主要位:

// CLASS CAUSING THE PROBLEM ------------------ 
public class HGraphic extends JPanel { 

    // Attributes 
    public int numberOfCoincidences = 0; 

    // Constructor 
    public HGraphic() { 
     super(new BorderLayout()); 
    } 

    public void updateNum(int tmpNum) { 
     numberOfCoincidences = tmpNum; 
    } 
} 

// MAIN FRAME CLASS ---------------------------------- 
public class HSFrame extends javax.swing.JFrame { 

    private int newNum = 5; 
    private JComponent newContentPane; 

    public HSFrame() { 
     initComponents(); 
    } 

    private void initComponents() { 
     newContentPane = new HGraphic(); 
     // HERE IS WHERE I WOULD LIKE TO ACCESS THE CLASS METHOD 
     // NetBeans say it does not recognize this method :(
     newContentPane.updateNew(newNum); 
    } 
} 

再次感謝您!

+0

重新格式化代碼;如果不正確請回復。 – trashgod 2010-08-25 16:31:18

回答

5

因爲您的實例(newContentPane)類型爲JComponent。您需要將其定義爲HGraphic或在方法調用之前將其強制轉換。

private ***JComponent*** newContentPane; 

需要改變到:

private HGraphic newContentPane; 

或在你的方法調用:

((HGraphic) newContentPane).updateNum(newNum); 
+0

如果可行,我保證會讓你成爲雕像! 感謝您的快速回答! – Edu 2010-08-25 15:37:09

+0

@Edu:點擊@mohammad shamsi的答案旁邊的綠色支票接受。 – trashgod 2010-08-25 16:40:15

+0

非常感謝!有用!!!! viva Mohammad! – Edu 2010-08-25 19:10:18