如何从一个jframe访问另一个jframe的arraylist

时间:2014-08-13 20:26:42

标签: java swing netbeans arraylist awt

我是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);
}

2 个答案:

答案 0 :(得分:3)

关键问题实际上与JFrame或Swing几乎没有关系,而只是将信息从一个对象传递到另一个对象。 Swing参与的唯一方法是,如果您想传递此信息以响应某种或另一种事件。

解决方案通常只是简单地为您的类提供适当的getter和setter方法,分离出您的“模型”,程序的逻辑部分,“视图”,程序的GUI部分以及使用某种类型的侦听器或观察者类型接口(例如可以通过Swing事件侦听器获得)在另一个类准备好推送或拉取信息时通知一个类。

更一般的建议:

  • 避免制作任何不需要静态的静态。这是一个快速解决方案,从长远来看通常会导致更多的痛苦,因为它会使您的代码很难在以后进行增强并进行测试。
  • 避免使用大量JFrame。大多数专业GUI只有一个主窗口,如果你愿意,只有一个“JFrame”。通常最好在此JFrame中交换视图,例如使用CardLayout或使用选项卡式窗格(如果需要)。此外,需要以模态方式在另一个窗口中获取的信息可以在模态对话框中显示。
  • 获取一本关于OOP基础知识的好书,因为它适用于Java编程,例如Bruce Eckel's "Thinking in Java"
  • 并获得一本关于使用Java的设计模式的好书,例如Head First Design Patterns。这两个概念是推动Java发展的关键。
  • 避免使用代码生成实用程序(如NetBean的表单创建实用程序),因为它可以防止您学习Swing细节,并阻碍您学习创建复杂Swing GUI的能力。当然,在你的Swing熟练工之后使用这些工具,但在那之前,使用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类中执行此操作