0

我有一个包含默认 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”的按钮。“注册”是我试图显示的 JPanel 变量的名称。

4

2 回答 2

2

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

附录:

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

于 2012-11-01T00:01:03.680 回答
1

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

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

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

于 2012-10-31T23:52:24.543 回答