我是Java的新手。在我的一个项目中,我有三个jframe。它们是Menuframe,包含菜单列表; LoadDatafromExcelframe,用于从Excel文件中选择和读取数据;和ShowDataFrame,用于显示我在LoadDatafromExcelframe中读取的数据。实际上它是一个大项目的一部分。不是整个项目!在我的项目开始时,我正在阅读Excel文件并加载arraylist中的所有数据。直到这一点,我很好。现在我想从menulist单击ShowDataFrame来显示我在LoadDatafromExcelframe中读取的数据。如果我能访问arraylist,那么我想我可以继续前进。我的问题是"如何从一个jframe(ShowDataFrame)访问arraylist到另一个帧(LoadDatafromExcelframe)?"我正在使用Netbeans IDE。
private void jMenuItemShowDataActionPerformed(java.awt.event.ActionEvent evt) {
showDataFrame.setVisible(true);
}
答案 0 :(得分:3)
关键问题实际上与JFrame或Swing几乎没有关系,而只是将信息从一个对象传递到另一个对象。 Swing参与的唯一方法是,如果您想传递此信息以响应某种或另一种事件。
解决方案通常只是简单地为您的类提供适当的getter和setter方法,分离出您的“模型”,程序的逻辑部分,“视图”,程序的GUI部分以及使用某种类型的侦听器或观察者类型接口(例如可以通过Swing事件侦听器获得)在另一个类准备好推送或拉取信息时通知一个类。
更一般的建议:
有关更具体的建议,您需要提供更多详细信息并提供更多代码。
修改2
根据您的帖子提供更多建议:
在我的一个项目中,我有三个jframe。它们是Menuframe,包含菜单列表; LoadDatafromExcelframe,用于从Excel文件中选择和读取数据;和ShowDataFrame,用于显示我在LoadDatafromExcelframe中读取的数据。
这看起来更好地实现了创建3个JPanel而不是3个JFrame。然后,您可以使用CardLayout在单个JFrame中根据需要显示JPanel,以帮助您交换它们。
实际上它是一个大项目的一部分。不是整个项目!在我的项目开始时,我正在阅读Excel文件并加载arraylist中的所有数据。
这个ArrayList不应该“读入JFrame”,而是数据属于非GUI类,确切地说是你的“模型”类之一。然后是视图类,您的GUI代码可以在必要时向模型询问此数据。阅读本网站上的模型 - 视图 - 控制程序设计,了解有关此有用模式的更多信息。
直到这一点,我很好。现在我想从menulist单击ShowDataFrame来显示我在LoadDatafromExcelframe中读取的数据。
这里使用MVC结构,你的一个“视图”类,持有“menulist”的类应该通知“控制”类你的代码需要“model”类持有的ArrayList数据。这可以通过让Control类保持对“model”和“view”的引用并使“view”类保持对控件的引用从而允许类之间的通信来完成。
答案 1 :(得分:-2)
您可以在对象的属性中以静态方式更改您的ArrayList,然后只需调用包含de ArrayList的te类的名称,并调用ArrayList并在任何您想要的地方使用它。
这样的事情:
JFrame1.ArrayList1.add(“some stuff”);
显然,在要调用ArrayList的JFrame2类中执行此操作