2016-08-03 73 views
0

我正在編寫一個GUI。在那個GUI中,我有一個下拉框可以選擇不同的人。每個人都有一個CardLayout窗格,並在該窗格中包含關於他們自己和他們所擁有的東西的信息。分離多個JTables

我已經寫了一個名爲PanelTableItems(Person person)類。

在節目開始我使用這個類來創建這些表的複式(每個人在我的計劃)。每個CardLayout窗格都有這些表格之一。我剛剛實現了一個ListSelectionListener來存儲最後一個選定的行,我正在使用一個私有函數來從表中選擇項目。然而,當我實現這個選擇監聽器時,我嘗試了一個打印,出於某種原因,似乎如果我的程序中有兩個人,即使「第二個」表不在視圖中,選擇監聽器也會進行兩次打印。

這裏是我的問題:

如何確保只運行當前在「視圖」使用CardLayout表?第二個窗格是隱藏的,但似乎對第一個窗格的所有函數調用也管理在第二個窗格上運行,因爲它們的類型相同。

我可以發佈一個MCVE,但是這是一個多實際編碼問題的理論/解決問題。

在此先感謝。

+0

我'每個人都有CardLayout窗格並在窗格與自己和事物信息的表,他們own.'與RowFilter,它代替== JTable中'而且每個CardLayout窗格有以下tables.'之一,因爲你可以從JTables視圖中刪除列,數據仍然可以從模型訪問,您可以存儲大量數據 – mKorbel

回答

3

在人的選擇,你可以只切換可見面板:

CardLayout cl = (CardLayout) cards.getLayout(); 
cl.show(cards, "idOfTheSelectedPersonPanel"); 

所以,你應該已經在佈局中每一個與關於它代表了人不同的ID註冊的面板。

隱藏(不可見)的面板沒有得到任何用戶輸入 - 如果你看到那麼這樣的行爲你的代碼做了什麼。

在ListSelectionListener需要過濾處理只新的東西被選中的事件。

+0

再次考慮我的代碼後,我發現您所說的是正確的。是的,這是我的ListSelectionListener,讓我不確定發生了什麼,因爲它似乎在原始表上選擇了新的東西時對兩個jtables做出響應。但我不知道爲什麼。 – Zeliax

0

我建議你重新檢查你的組件添加到你的卡的方式,你可能會添加所有表到相同的容器女巫只使最後一個可見,嘗試將每個表添加到JPanel或JScrollPane。