2010-08-25 3 views
1

Я работаю над проектом, где у меня есть класс HGraphic, который расширяет JPanel. Этот класс имеет открытый метод updateNum, который получает целое число как параметр и выполняет некоторую работу с ним, обновляя некоторые элементы.Swing - Методы и атрибуты расширенного класса JPanel недоступны из JFrame

Этот класс HGprahic имеет экземпляр в основном классе моего проекта (основной класс расширяет JFrame) ... Мне нужно вызвать этот конкретный метод HGraphic из основного класса, посылая переменную в качестве параметра.

Проблема заключается в том, что, хотя метод объявлен как открытый, я не могу получить к нему доступ, выполняя нормальный hGraphicInstance.method (переменная), как я обычно делаю.

Я просмотрел документацию JPanel, но нигде не нашел, что вы не можете получить доступ к пользовательским методам ... или что вы не можете создавать сеттеры (другой способ делать то, что мне нужно).

Когда я создаю экземпляр класса 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

ответ

5

т.к. ваш экземпляр (newContentPane) type - JComponent. вам необходимо определить его как HGraphic или передать его перед вызовом метода.

private ***JComponent*** newContentPane; 

необходимо изменить, чтобы:

private HGraphic newContentPane; 

или в вызове метода:

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

Если это сработает, я обещаю сделать вам статую! Спасибо за быстрый ответ! – Edu

+0

@Edu: Нажмите зеленый флажок рядом с ответом @mohammad shamsi, чтобы принять его. – trashgod

+0

СПАСИБО ВАМ ОЧЕНЬ! оно работает!!!! viva Mohammad! – Edu

Смежные вопросы