Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据解析回主面板(java/swing)_Java_Swing - Fatal编程技术网

将数据解析回主面板(java/swing)

将数据解析回主面板(java/swing),java,swing,Java,Swing,设立: 我有一个带有选项卡窗格的主面板,我有一个单独的JPanel“extra”,extra创建一个对象,我希望将该对象传递回主面板,在那里我可以实际使用它/将它添加到数据结构中 框架>面板>选项卡窗格>面板(单独的类,实例化为新对象) 我试图在mainPanel中添加一个侦听器,检查PanelExtra中的布尔值是否发生更改,然后运行一个方法等,但没有成功 我会在主面板中创建一个方法来接受对象,但我不知道如何引用它。(getRootPane()未返回任何内容) 另外,我不确定我是否使用了正确的

设立: 我有一个带有选项卡窗格的主面板,我有一个单独的JPanel“extra”,extra创建一个对象,我希望将该对象传递回主面板,在那里我可以实际使用它/将它添加到数据结构中

框架>面板>选项卡窗格>面板(单独的类,实例化为新对象)

我试图在mainPanel中添加一个侦听器,检查PanelExtra中的布尔值是否发生更改,然后运行一个方法等,但没有成功

我会在主面板中创建一个方法来接受对象,但我不知道如何引用它。(getRootPane()未返回任何内容)

另外,我不确定我是否使用了正确的术语,虽然我是在命令行Unix环境中学习Java的,但Swing对我来说是非常陌生的

我尝试了监听器、观察器,目前正在考虑在根目录下创建一个对象,并通过所有对象传递(因为java通过引用传递,我可以将信息传递回我想要的任何地方),如果这不是一个完全愚蠢的想法,请让我知道,我们都可以继续我们的生活。如果有更好的方法,那就太好了

(文件概述)

[programApp]>[programView>选项卡窗格]>[panel] 面板是使用new创建的,并且存在于单独的类中。 我想将数据从面板传递回programView(在netbeans中的projectNameView)

我将尝试添加尽可能多的信息。

您可以使用

实际上,根据您的偏好或具体任务,有两种变体。 对于非常简单的情况,您可以使用带有静态字段的类来传递对象。 另一种方法是定义自己的侦听器,如:

private myPanel extends JPanel implements Notification {
。。。 在何处创建该面板:

myPanel.addNotificationReciever(mainPanel);
稍后,您只需调用
fireNotification
或其他任何功能,并为您的
主面板实现类似的侦听器即可

实际上,根据您的偏好或具体任务,有两种变体。 对于非常简单的情况,您可以使用带有静态字段的类来传递对象。 另一种方法是定义自己的侦听器,如:

private myPanel extends JPanel implements Notification {
。。。 在何处创建该面板:

myPanel.addNotificationReciever(mainPanel);

稍后,您只需调用
fireNotification
或其他什么,并为您的
主面板实现类似的侦听器

SirVaulterScoff给出了我认为最好的答案,但我想我应该再添加一些(还不能添加注释,所以我正在创建一个新的答案)

您还应该阅读Observer Observable模式(),它与MVC模式一起使用。在将MVC类链接在一起时,它将非常有用,以确保所有内容都尽可能松散耦合


附带说明:如果要创建具有用户界面的应用程序,MVC确实是一种您应该关注的模式。它将为您省去许多麻烦,并使您的应用程序更易于维护和扩展。

SirVaulterScoff给出了我认为最好的答案,但我想我应该再添加一些(还不能添加注释,所以我正在创建一个新的答案)

您还应该阅读Observer Observable模式(),它与MVC模式一起使用。在将MVC类链接在一起时,它将非常有用,以确保所有内容都尽可能松散耦合


附带说明:如果要创建具有用户界面的应用程序,MVC确实是一种您应该关注的模式。它将为您省去许多麻烦,并使您的应用程序更易于维护和扩展。

我认为最好的方法是将JFrame对象一直传递到带有最终JPanel的类(如您所说)。它不整洁,但可能是最简单的。您到底想对框架做什么?您可以尝试使用spring(),它可以处理您的情况。但这可能是一种过度的杀伤力。无论如何,我建议尝试最简单的方法,@Hidde说了什么,或者只是在mainPanel上使用一些静态变量,这将保存您的对象。我认为最好的方法是将JFrame对象一直传递给带有最终JPanel的类(如您所说)。它不整洁,但可能是最简单的。您到底想对框架做什么?您可以尝试使用spring(),它可以处理您的情况。但这可能是一种过度的杀伤力。不管怎样,我建议尝试最简单的方法,@Hidde所说的,或者只是在主面板上使用一些静态变量,这将保存您的对象。这似乎是一个好主意,但myPanel.AddNotificationReceiver(主面板)(或任何未找到引用的面板)不起作用。我只能.addNotify()。是的,您应该创建两个接口:让我们称它们为NotificationListener和NotificationSubmiter或其他什么。第一个应该有一个void onNotification(Object o)方法并在主面板中实现,而后面的应该有两个方法-addNotificationReceiver(NotificationListener)和fireNotification()。这两个方法背后的想法:第一个方法只是将传递给它的所有侦听器存储在ArrayList中,而第二个方法迭代此列表并在每个列表上调用方法onNotification查看简短示例以说明我的注释这似乎是个好主意,但myPanel.AddNotificationReceiver(mainPanel)(或任何面板,都找不到引用)不起作用。我只能.addNotify()。是的,您应该创建两个接口:让我们称它们为NotificationListener和NotificationSubmiter或其他什么。第一个应该有一个void onNotification(Object o)方法并在主面板中实现,而后面的应该有两个方法-addNotificationReceiver(NotificationListener)和fireNotification()。这两个方法背后的想法:第一个方法只是将传递给它的所有侦听器存储在ArrayList中,而第二个方法迭代此列表并在每个列表上调用方法onNotification请看一个简短的示例来说明我的注释