簡體   English   中英

JFrame JPanel GUI中的CardLayout

[英]CardLayout in JFrame JPanel GUI

我有一個主JFrame,其中包含一個默認的JPanel。 我正在嘗試使用此JPanel將不同的JPanels附加到我的應用程序,以模擬瀏覽應用程序的效果。 我注意到,要使CardLayout正常工作,JFrame通常必須具有某種方式來控制JPanel中顯示的內容(例如,按鈕,下拉框等)。我試圖做的是擁有一個主頁( JPanel)加載到JFrame中的默認JPanel中,並允許用戶使用該主JPanel中可用的可單擊按鈕/圖標進行導航。

由於JFrame和默認的JPanel與其余的JPanels在不同的類中,因此我無法訪問默認的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變量的名稱。

這聽起來像是一個設計問題。 沒有看到一些代碼,我無法給出具體細節。 話雖這么說,您需要解決的主要問題是提供用於控制導航的按鈕,並引用默認的JPanel及其CardLayout。 從那里開始,只需調用next()previous()show()

附錄:

show()的第二個參數是調用add()時提供的名稱。 如果使用的是NetBeans GUI生成器,則可以在屬性窗口中進行設置。 選擇面板並向下滾動到“布局”。 將Card Name設置為所需的String值,然后在調用show()時使用相同的值。

使用一個可以在導航窗格(主頁)和用於切換CardLayout視圖的“默認”之間進行對話的模型。

基本上,模型將具有簡單的setter和getter,應用程序的兩個部分可以使用它們來更改和觀察模型的狀態。 您將需要提供某種偵聽器,以通知感興趣的各方模型已更改,最簡單的可能是ChangeListenerPropertyChangeListener

這樣,您可以隨時間更改模型而不會影響使用它們的那些組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM