假设我有两个JFrame表单:StaffListMenu
和LeaveDetailsMenu
。
在StaffListMenu
类中,我有一个名为staff
的属性,它是当前系统中所有工作人员的ArrayList。我想按一下按钮打开LeaveDetailsMenu
表单,然后将staff
属性传递给LeaveDetailsMenu
类。据我所知,我会这样做:
private void btnLeaveDetailsActionPerformed(java.awt.event.ActionEvent evt) {
LeaveDetailsMenu leaveDetailsForm = new LeaveDetailsMenu(staff);
leaveDetailsForm.setVisible(true);
}
现在,我想调用一些方法并从staff
类重新分配leaveDetailsMenu
ArrayList中的一些元素。如果我这样做,更改是否会反映在staff
类的StaffListMenu
属性中?
我读到Java没有通过引用传递(就像C#可以做的那样,我用于桌面应用程序的唯一其他语言),而是传递指向staff
的内存位置的指针。按照这个逻辑,它应该对StaffListMenu
类中的属性进行更改,对吗?
另外,这是一个两部分问题,当StaffListMenu
表单关闭时,我可以在LeaveDetailsMenu
课程中识别出一种方法吗?像回调一样?
感谢您的帮助。
答案 0 :(得分:0)
它应该对StaffListMenu类中的属性进行更改, 正确?
是肯定的。你传递了ArrayList对象(从技术上讲,你通过值传递ArrayList的地址在内存中的值)所以对调用内对象所做的任何更改都将在它之外可见。
有什么方法可以在我的StaffListMenu类中识别出来 LeaveDetailsMenu表单已关闭?
是肯定的。看看Window.addWindowListener(WindowListener l)(JFrame继承)。您提供了一个监听器,您可以收到窗口关闭事件的通知。