Swing - Методы и атрибуты расширенного класса JPanel, недоступного из JFrame - PullRequest
1 голос
/ 25 августа 2010

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

Этот класс 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);
    }
}

Еще раз спасибо!

1 Ответ

5 голосов
/ 25 августа 2010

потому что тип вашего экземпляра (newContentPane) - JComponent.вам нужно определить его как HGraphic или привести его перед вызовом метода.

private ***JComponent*** newContentPane;

необходимо изменить на:

private HGraphic newContentPane;

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

((HGraphic) newContentPane).updateNum(newNum);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...