用于浏览基于JPane的视图的Java Swing体系结构

用于浏览基于JPane的视图的Java Swing体系结构,java,swing,architecture,layout,Java,Swing,Architecture,Layout,我已经用静态布局做了几个简单的基于swing的应用程序,但是现在我在尝试创建一个包含多个视图的应用程序时遇到了一个问题,这些视图可以通过按相应的导航按钮进行更改 您可以将该想法与网站进行比较,这样每个视图都有按钮来访问某些其他视图,但这将在单个JFrame中起作用 我发现CardLayout()可能是这种结构的合适解决方案,但我无法找到一种方法来从我在单独类中实现的JPANE内部的按钮切换视图 当然,一种方法是实例化父类中的所有内容,就像在小型java教程示例中一样,但对于多个视图来说,这既不干

我已经用静态布局做了几个简单的基于swing的应用程序,但是现在我在尝试创建一个包含多个视图的应用程序时遇到了一个问题,这些视图可以通过按相应的导航按钮进行更改

您可以将该想法与网站进行比较,这样每个视图都有按钮来访问某些其他视图,但这将在单个JFrame中起作用

我发现CardLayout()可能是这种结构的合适解决方案,但我无法找到一种方法来从我在单独类中实现的JPANE内部的按钮切换视图

当然,一种方法是实例化父类中的所有内容,就像在小型java教程示例中一样,但对于多个视图来说,这既不干净也不模块化,不是吗


如何实现这一点,以便我可以访问视图切换方法?

是的,CardLayout特别适用于需要在不同视图之间切换的情况。显然,正如@medoal所说,JTabbedPane也可以使用。无论如何,考虑到您希望使用面板内带有按钮的卡片布局,允许您更改可见面板,您可以执行以下操作:

  • 创建面板并允许它们注册实现给定接口的对象。该接口将包含一个覆盖该方法的方法。作为一个例子,考虑到你的面板都有自己的名字,而且每个名字都不一样,你可以这样写

    公共接口面板切换器{ public void toggleTo(字符串名称); }

  • 在包含CardLayout的类中,您可以使用以下内容实现PanelToggler

    public void toggleTo(字符串名称){ ((CardLayout)getLayout())。显示(此,名称); }


  • 这样,在每个面板中,从CardLayout切换查看元素的每个按钮只需使用正确的参数调用toogleTo即可。

    可能类似于JTabbedPane?您想做什么,一种向导?如果是这样的话,有几个开源库可以帮助您(但我很久没查出来了)。否则,如果您需要更多的可能性(如同时显示多个视图),则可能需要一个停靠库。请进一步澄清你的问题。一次一个视图就足够了。我们的目标是制作一个简单的全屏应用程序,其中包含一些基本组件,如用于触摸屏界面的列表和按钮。向导并不是一个非常准确的描述,因为必须能够在这些视图之间自由移动,而不是按顺序移动。谢谢,这对我来说是完美的。这是一种用于实现控制父元素中内容的组件的标准模式吗?在我看来,所有的示例和教程都非常小,它们在同一个类中实例化了所有组件和侦听器,因此您不必考虑将操作传播到父元素。或者这可以用完全不同的体系结构来解决吗?事实上,这些示例的问题在于它们没有传达实际应用程序通常具有的复杂性。在现实生活中,像我在这里公开的模式(构建一个“迷你”接口的唯一目的是让孩子们控制家长)通常非常有用,可以在UI的所有组件之间实现最小的隔离。使用这种模式,您可能会被讽刺地称为“架构师”,但您的代码将始终支持简单的重构(重构在UI开发中更为常见,因为UI代码只是市场选择的结果)。