【问题标题】:CardLayout in JFrame JPanel GUIJFrame JPanel GUI 中的 CardLayout
【发布时间】:2012-10-21 13:30:06
【问题描述】:

我有一个包含默认 JPanel 的主 JFrame。我正在尝试使用此 JPanel 将不同的 JPanel 附加到我的应用程序,以模拟浏览应用程序的效果。我注意到,要使 CardLayout 工作,JFrame 通常必须有某种方式来控制 JPanel 中显示的内容(例如按钮、下拉框等)。我想要做的是有一个主页( JPanel)加载到 JFrame 中的默认 JPanel 中,并允许用户使用该主页 JPanel 中可用的可点击按钮/图标进行导航。

由于 JFrame 和默认 JPanel 与其他 JPanel 位于不同的类中,因此我无法访问默认 JPanel(因为它是私有的)以通过单击 JPanel 上的按钮来更改其上显示的内容其他类之一。有没有办法解决这个问题?

另外,如果我将应用程序中所需的每个按钮都附加到 JFrame 并控制从那里显示的 JPanel,它会起作用吗?我可以根据需要使按钮可见/不可见,这有意义吗?

这是我在 JFrame 类中调用的代码:

 private void jButton45MouseClicked(java.awt.event.MouseEvent evt) {
    CardLayout card= (CardLayout) displayPanel.getLayout();
    card.show(displayPanel, "register");
}

displayPanel 是循环显示所有卡片的默认面板,而 jButton45 是 JFrame 中标题为“Register”的按钮。 “register”是我要显示的 JPanel 变量的名称。

【问题讨论】:

  • show() 的第二个参数不是变量名。这是您在致电add() 时提供的名称。如果您使用的是 NetBeans GUI Builder,则可以在属性窗口中进行设置。选择面板并向下滚动到“布局”。将 Card Name 设置为所需的 String 值,然后在调用 show() 时使用相同的值。

标签: java swing user-interface jbutton cardlayout


【解决方案1】:

使用可以在导航窗格(主页)和用于切换CardLayout 视图的“默认”之间进行对话的模型。

基本上,模型将具有简单的 setter 和 getter,应用程序的两个部分可以使用它们来更改和观察模型的状态。您需要提供某种侦听器来通知相关方模型已更改,最简单的可能是ChangeListenerPropertyChangeListener

这样,您可以随着时间的推移更改模型,而不会影响使用它的那些组件。

【讨论】:

    【解决方案2】:

    这听起来像是一个设计问题。没有看到一些代码,我无法提供具体细节。话虽如此,您需要解决的主要问题是提供控制导航的按钮,并引用默认的 JPanel 及其 CardLayout。从那里只需调用next()previous()show()

    附录:

    show() 的第二个参数是您在调用add() 时提供的名称。如果您使用的是 NetBeans GUI Builder,则可以在属性窗口中进行设置。选择面板并向下滚动到“布局”。将 Card Name 设置为所需的 String 值,然后在调用 show() 时使用相同的值。

    【讨论】:

    • 我重新安排了一些事情(上面更新的帖子)。我开始调用 show 函数,但是当我点击按钮时 JPanel 没有改变,我错过了什么吗?跨度>
    • update 下一个函数显然有效.. 只是不是 show(),我知道我没有输入错误的参数,第二个参数是字符串名称卡对吗?
    • @Mike 第二个参数与您在将组件添加到“默认”面板时为组件(在本例中为 JPanel,我认为)提供的名称相同。
    猜你喜欢
    • 2013-04-15
    • 2023-03-26
    • 1970-01-01
    • 2015-02-04
    • 2012-01-06
    • 2011-07-08
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多