У меня есть класс приложения, как показано ниже, который создает объекты из i) класса пользовательского интерфейса, который я написал, который расширяет JFrame и реализует ActionListener, и ii) простой «Счет-фактура», класс. Первый будет использоваться в качестве основного интерфейса, который принимает текстовую запись для определенных значений («номер счета») и передает эти значения последнему классу (счету). Я хотел бы расширить класс приложения (в котором реализована основная функция), чтобы в нем был реализован метод actionPerformed() (не в пределах main()) для прослушивания нажатия одной из двух кнопок в классе UI , создавая новый экземпляр класса Purchase в событии, который, в свою очередь, передаст ссылку «this» на экземпляр button.addActionListener() одного экземпляра класса UI.Передача класса приложения Ссылка на конструктор (Java)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CreatePurchase implements ActionListener {
boolean isInterface = true;
CreatePurchase testing = new CreatePurchase();
SupportiveJFrame uiFrame = new SupportiveJFrame(testing, "Southwest Invoice Systems", isInterface);
Purchase firstPurchase = new Purchase(uiFrame, true);
public static void main(String args[]){
}
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
if(source == uiFrame.newInvoice){
//New object created here
}
}
}
Мой вопрос, как может ссылку на класс приложения передаются в конструктор пользовательского интерфейса, таким образом, что позволяет ему быть передан в JButton «newObject»? Если бы я размещал инициализации «uiFrame» и «firstPurchase» в main(), «firstPurchase» выходил за пределы действия actionPerformed (ActionEvent e).
@AdrianM. На самом деле, нет. Код, который я написал, предназначен только для * демонстрации * того, как * этот * можно использовать; это не должно быть похоже на ваш код. Посмотрите на 'new A (this)' works и игнорируйте 'doSomething' и' callOwnerDoSomething' (которые есть только для демонстрации). 'doSomething' похоже на' actionPerformed' в вашем коде. – immibis
Проблема заключается в том, что если я хочу передать ссылку «firstPurchase» из actionPerformed (ActionEvent e), реализованную там же, где у вас есть «public void doSomething()», firstPurchase «необходимо инициализировать вне основного(). Однако, поскольку для инициализации этого объекта требуется создание экземпляра класса расширения JFrame, я инициализировал его перед «firstPurchase» - следовательно, перед main(). Это приводит к некоей недействительной этой ссылке, передаваемой в конструктор uiFrame , хотя никаких исключений не выбрасывается. Программа немедленно прекращается. –