繁体   English   中英

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

[英]How can I access arraylist from one jframe to another jframe

我在Java中相对较新。 在我的一个项目中,我有三个jframe。 它们是Menuframe,具有菜单列表; LoadDatafromExcelframe,用于从Excel文件中选择和读取数据; 和ShowDataFrame,用于显示我在LoadDatafromExcelframe中读取的数据。 实际上,这是一个大型项目的一部分。 不是整个项目! 在我的项目开始时,我正在读取Excel文件并将所有数据加载到arraylist中。 到此为止,我很好。 现在,我想从菜单列表中单击ShowDataFrame以显示在LoadDatafromExcelframe中读取的数据。 如果我可以访问arraylist,那么我可以继续前进。 我的问题是“如何从一个jframe(ShowDataFrame)到另一个框架(LoadDatafromExcelframe)访问arraylist?”我正在使用Netbeans IDE。

private void jMenuItemShowDataActionPerformed(java.awt.event.ActionEvent evt) {                                                   
            showDataFrame.setVisible(true);
}

实际上,关键问题与JFrames或Swing无关,而仅仅是将信息从一个对象传递到另一个对象之一。 Swing参与的唯一方法是,如果您希望传递此信息以响应某种事件。

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

更一般的建议:

  • 避免使不需要静态的任何事物成为静态。 这是一个快速的解决方案,从长远来看通常会带来更多的痛苦,因为这会使您的代码很难在以后进行增强和测试。
  • 避免使用大量的JFrame。 大多数专业的GUI只有一个主窗口,如果有的话,还有一个“ JFrame”。 通常,最好在此JFrame中交换视图,例如,如果需要的话,可以使用CardLayout或选项卡式窗格。 同样,需要在另一个窗口中以模式方式获取的信息也可以显示在模式对话框中。
  • 获得适用于Java编程的OOP基础知识方面的好书,例如Bruce Eckel的“ Thinking in Java”
  • 并获得有关使用Java的设计模式(例如Head First Design Patterns)的好书。 这两个概念是Java向前发展的关键。
  • 避免使用诸如NetBean的表单创建实用程序之类的代码生成实用程序,因为它会使您无法学习Swing细节,并阻碍了您学习创建复杂的Swing GUI的能力。 当然,一旦成为Swing的熟练手,就可以使用这些工具,但在此之前,请使用Swing教程来手动学习库和代码。

有关更具体的建议,您将需要提供更多详细信息并提供更多代码。


编辑2

根据您的帖子提供更多建议:

在我的一个项目中,我有三个jframe。 它们是Menuframe,具有菜单列表; LoadDatafromExcelframe,用于从Excel文件中选择和读取数据; 和ShowDataFrame,用于显示我在LoadDatafromExcelframe中读取的数据。

创建3个JPanels而不是3个JFrames似乎可以更好地实现。 然后,可以使用CardLayout在单个JFrame中根据需要显示JPanels,以帮助您交换它们。

实际上,这是一个大型项目的一部分。 不是整个项目! 在我的项目开始时,我正在读取Excel文件并将所有数据加载到arraylist中。

此ArrayList不应“读入JFrame”,而应属于非GUI类,确切地说,是您的“模型”类之一。 然后,在必要时,视图类和您的GUI代码可以向模型询问此数据。 在此站点上阅读Model-View-Control程序设计,以了解有关此有用模式的更多信息。

到此为止,我很好。 现在,我想从菜单列表中单击ShowDataFrame以显示在LoadDatafromExcelframe中读取的数据。

在这里,使用MVC结构,您的“视图”类之一,一个持有“菜单”的类应通知“控件”类您的代码需要“模型”类持有的ArrayList数据。 所有这些都可以通过使Control类保留对“模型”和“视图”的引用,并使“ view”类保留对控件的引用来实现,从而允许类之间进行通信。

您可以在对象的属性中以公共方式静态更改ArrayList,然后仅调用包含de ArrayList的te类的名称,然后调用ArrayList并在需要的任何地方使用它。

像这样:

JFrame1.ArrayList1.add(“一些东西”);

显然,在要调用ArrayList的JFrame2类中执行此操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM