我有一个主JFrame,它包含一个默认的JPanel。我正在尝试使用此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变量的名称。
答案 0 :(得分:2)
这听起来像是一个设计问题。没有看到一些代码,我无法提供具体细节。话虽这么说,你需要解决的主要问题是提供控制导航的按钮,引用默认的JPanel及其CardLayout。从那里开始只需要调用next()
,previous()
或show()
。
<强>附录:强>
show()
的第二个参数是您拨打add()
时提供的名称。如果您使用的是NetBeans GUI Builder,则可以在属性窗口中进行设置。选择面板并向下滚动到“布局”。将卡名称设置为所需的字符串值,然后在调用show()
时使用相同的值。
答案 1 :(得分:1)
使用可在导航窗格(主页)和用于切换CardLayout
视图的“默认”之间进行通信的模型。
基本上,模型将具有简单的setter和getter,应用程序的两个部分可以使用它来更改和观察模型的状态。您需要提供某种类型的监听器来通知感兴趣的各方模型已更改,最简单的可能是ChangeListener
或PropertyChangeListener
。
通过这种方式,您可以随时更改模型,而不会影响使用它的组件。