Доступ к переменным из другого класса (Java) - PullRequest
0 голосов
/ 29 июня 2018

Я некоторое время не программировал и только начал новый проект, чтобы освежить свои навыки Java / поправиться, так что это может быть глупый вопрос.

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

Main:

package sample;

public class main {
    class1 c1 = new class1();
}

class1:

package sample;
import javax.swing.JPanel;

public class class1 {

    int var1 = 0;
    JPanel jp = new JPanel();

    public class1(){
        jp.addMouseListener(new MouseListenerClass());
        jp.setName("Test");
    }

}

MouseListenerClass:

package sample;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JPanel;

public class MouseListenerClass extends MouseAdapter
{
    public void mousePressed(MouseEvent me)
    {
          JPanel jp1 =(JPanel) me.getSource();
          System.out.println(""+jp1.getName());
    }
}

Как я могу получить доступ к переменной (например, var1) из моего class1, когда я нахожусь внутри метода mousePressed внутри моего MouseListenerClass / другого метода в другом классе.

Привет

1 Ответ

0 голосов
/ 29 июня 2018

Просто передайте экземпляр одного класса другому и получите получатель для поля:

public class UIClass {
    private int number = 42;
    private JPanel jp = new JPanel();

    public UIClass() {
        jp.addMouseListener(new MouseListenerClass(this));
        jp.setName("test");
    }

    public int getNumber() {
        return number;
    }
}

public class MouseListenerClass extends MouseAdapter {
    private UIClass uiclass;

    public MouseListenerClass(UIClass uiclass) {
        this.uiclass = uiclass;
    }

    public void mousePressed(MouseEvent me) {
        JPanel jp1 = (JPanel) me.getSource();
        System.out.println(jp1.getName());
        System.out.println(uiclass.getNumber());
    }
}

Примечания: я изменил имя с class1 на UIClass, поскольку первое не соответствует стандартному соглашению Java для имен классов, начинающихся с заглавных букв, и я удалил ""+ из строки, которая печатает jp1.getName() поскольку она, вероятно, уже возвращает строку, и даже если это не так, существует перегрузка System.out.println, которая принимает Object и вызывает toString() для нее.

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