Использование другого кода Java в проекте (как получить доступ к переменным)

#java #methods

#java #методы

Вопрос:

Я написал простую программу рисования, и для создания меню я использовал этот источник, http://download.oracle.com/javase/tutorial/displayCode.html?code=http://download.oracle.com/javase/tutorial/uiswing/examples/components/MenuLookDemoProject/src/components/MenuLookDemo.java

Поэтому в моей программе для отображения меню я добавил только эти строки:

     MenuDemo demo = new MenuDemo();
    frame.setJMenuBar(demo.createMenuBar());
  

Когда я запустил программу, меню успешно работает, но, с другой стороны, например, когда я нажимаю sth в меню, в методе «actionPerformed» я хочу изменить логическую переменную моей программы. Но «actionPerformed» существует в «MenuLookDemo.java «, поэтому я не могу добраться до переменных.

Можете ли вы предложить решение, пожалуйста?

Спасибо

Комментарии:

1. Вам действительно следует начать читать об объектно-ориентированном проектировании. Это вопрос уровня OO-101.

2. Разве здесь нельзя задавать вопросы уровня OO-101? Я подумал, что было бы совершенно нормально задавать подобные вопросы.

Ответ №1:

Возможно, вы можете переписать класс MenuDemo и передать свой объект MenuDemo , чтобы получить доступ к вашей переменной.

 class MenuDemo{
  YourType obj;
  MenuDemo(YourType obj){
    this.obj = obj;
  }
  // Now you can access elements of obj
}
  

Комментарии:

1. Пикаурд прав — MenuDemo нужен какой-то способ отправки информации в вашу программу (на самом деле — ваш объект, представленный в его примере как «obj»).

2. Я попробовал это, но основная проблема в том, что я хочу, чтобы некоторые переменные выполнялись при помечении события «actionPerformed». Я добавил аргументы в MenuDemo, но я не могу отправить этот объект в метод «actionPerformed», поэтому я не могу получить доступ к этой переменной

3. Где выполняется ваше действие? Можете ли вы вставить сюда свою структуру проекта? Я думал, что actionPerformed в MemoDemo, поэтому элемент menu может обрабатывать полученные им действия.

Ответ №2:

Основываясь на том, что у Pikaurd есть выше, сделайте это:

 public class MyType {
  int x;
  public void doTheNeedful() {
    x = 5;
  }
}
  

Затем убедитесь MenuDemo , что содержит поле obj класса MyType . Внутри actionPerformed() вызовите obj.doTheNeedful() .

Я намеренно не просто даю вам код для этого; приведенного выше предложения должно быть достаточно, чтобы вы поняли это.