Java 如何在Swing中创建单独的屏幕?

Java 如何在Swing中创建单独的屏幕?,java,swing,Java,Swing,我不断地发现自己在构建有多个屏幕的程序。例如,考虑一个程序,其中初始布局提供两个按钮:创建文件或编辑文件。单击一个按钮,用户将进入一个新屏幕,支持他们按下的任何按钮。然后他们点击一个后退按钮,它会将他们带回程序的主屏幕。我想知道如何最好地做这样的单独菜单。是否最好只创建单独的方法设置每个屏幕,然后在单击按钮(如“后退”按钮)时调用相应的方法?这正是我想做的,但鉴于有很多方法可以做到这一点,我想就一种可能更好的改变屏幕显示方式征求意见。 谢谢,AJ看看,这是一种开发可重用的通用级别操作的好方法看看

我不断地发现自己在构建有多个屏幕的程序。例如,考虑一个程序,其中初始布局提供两个按钮:创建文件或编辑文件。单击一个按钮,用户将进入一个新屏幕,支持他们按下的任何按钮。然后他们点击一个后退按钮,它会将他们带回程序的主屏幕。我想知道如何最好地做这样的单独菜单。是否最好只创建单独的方法设置每个屏幕,然后在单击按钮(如“后退”按钮)时调用相应的方法?这正是我想做的,但鉴于有很多方法可以做到这一点,我想就一种可能更好的改变屏幕显示方式征求意见。
谢谢,AJ

看看,这是一种开发可重用的通用级别操作的好方法

看看,如果屏幕的状态取决于上一个屏幕的状态(例如,在向导中),这是一种开发可重用的通用级别操作的好方法如果屏幕的状态取决于上一个屏幕的状态(例如,像在向导中一样),您可以按照

中描述的步骤进行操作。根据您对原始问题的第二条评论,我认为最好使用面板查看

查看如何为您想要的每个活动使用多个面板:

JPanel firstPanel = new JPanel();
JPanel secondPanel = new JPanel();
JPanel thirdPanel = new JPanel();
确保初始化时隐藏所有面板,然后在按钮单击事件发生时,使用以下方法简单地将一个面板替换为另一个面板:

firstPanel.hide();
secondPanel.show();
根据您使用的布局,还有其他技术。例如,如果使用BorderLayout,您可以简单地用另一个面板“替换”BorderLayout区域,然后重新验证,而不是删除和添加(或显示和隐藏多个面板):

container.add(BorderLayout.CENTER, thirdPanel);
container.validate();
还要注意的是,不同的操作系统(Windows、Mac等)会有不同的风格。例如,您提到了一个典型的Windows安装程序;人们开始期望安装程序以某种方式进行外观和工作,但在不同的操作系统上,存在完全不同的期望和外观

进一步阅读:


编辑

我想知道如何最好地做这样的单独菜单。是否最好只创建单独的方法设置每个屏幕,然后在单击按钮(如“后退”按钮)时调用相应的方法

这可以归结为个人偏好。您想在启动时初始化所有内容并在面板之间更快地交换(或者您称之为“屏幕”),还是希望更快地初始化并在需要时“延迟加载”每个组件

就我个人而言,在初始化过程中我会选择一切(除非在应用程序启动过程中有很多事情要做或加载)。这实际上取决于个人偏好


另一个编辑: 说到布局,也许一种不同的布局风格也会对您有所帮助,比如:


希望这能有所帮助。

根据您对原始问题的第二次评论,我认为最好使用面板

查看如何为您想要的每个活动使用多个面板:

JPanel firstPanel = new JPanel();
JPanel secondPanel = new JPanel();
JPanel thirdPanel = new JPanel();
确保初始化时隐藏所有面板,然后在按钮单击事件发生时,使用以下方法简单地将一个面板替换为另一个面板:

firstPanel.hide();
secondPanel.show();
根据您使用的布局,还有其他技术。例如,如果使用BorderLayout,您可以简单地用另一个面板“替换”BorderLayout区域,然后重新验证,而不是删除和添加(或显示和隐藏多个面板):

container.add(BorderLayout.CENTER, thirdPanel);
container.validate();
还要注意的是,不同的操作系统(Windows、Mac等)会有不同的风格。例如,您提到了一个典型的Windows安装程序;人们开始期望安装程序以某种方式进行外观和工作,但在不同的操作系统上,存在完全不同的期望和外观

进一步阅读:


编辑

我想知道如何最好地做这样的单独菜单。是否最好只创建单独的方法设置每个屏幕,然后在单击按钮(如“后退”按钮)时调用相应的方法

这可以归结为个人偏好。您想在启动时初始化所有内容并在面板之间更快地交换(或者您称之为“屏幕”),还是希望更快地初始化并在需要时“延迟加载”每个组件

就我个人而言,在初始化过程中我会选择一切(除非在应用程序启动过程中有很多事情要做或加载)。这实际上取决于个人偏好


另一个编辑: 说到布局,也许一种不同的布局风格也会对您有所帮助,比如:


希望这能有所帮助。

我觉得您不是指显示器中的“屏幕”(或:GraphicsEnvironment,GraphicsDevice)。也许你要澄清一下屏幕到底是什么意思?我想这可能有点让人困惑,但不知道该怎么说才好。就像在安装向导中单击“下一步”或“上一步”按钮时,窗口中的所有内容都会发生更改。这些独立的东西中的每一个都是我正在考虑的屏幕。单击“下一步”,它将带您进入下一个“屏幕”。我真的不知道该如何描述它。谢谢你的澄清,我已经添加了一个答案,我希望得到你想要的答案。想知道反对票:这个问题没有太大的错误,只是还在技术词汇的学习阶段+1为了补偿一点:-)“屏幕”绝对是指多监视器环境。我不确定是否有一个简单的词来描述您所追求的,但是使用类名作为描述通常更好地理解您所追求的