#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()
.
Я намеренно не просто даю вам код для этого; приведенного выше предложения должно быть достаточно, чтобы вы поняли это.