是否有可能獲得Java CardLayout中的頂級卡片? 我試着循環遍歷每個組件來檢查isVisible()的可見性,但似乎它們都是「可見的」。如何獲得Java CardLayout中的頂級卡片
編輯:通過「頂牌」我的意思是當前在「頂部」,正在顯示,而不是第一張或最後一張牌。另外,我不知道,但如果它幫助我在尋找一個JPanel(或其子類)
編輯:代碼片斷
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
上面的代碼總是打印出的每個組件類的名字,無論他們是否是可見的卡片。
編輯:我將此作爲學校作業的一部分。我不想在這裏獲得免費贈品,這項任務並不是圍繞這種佈局。它似乎是用於在面板之間切換的最方便的佈局。我的老師已經指定項目中不會有第三方代碼。我以前看過camickr鏈接的實現,但我無法使用它。我可以鬆散地實現它的類似功能,也許可以在文檔中提供參考,但我不能簡單地下載並使用它。
編輯:我想獲得頂牌的原因是因爲我有一個帶有「添加」按鈕的工具欄。我只想通過查看當前正在查看的面板知道要添加哪個按鈕,而不是爲我的兩個可能的事情中的每一個都添加一個按鈕。如果還有其他更適合的方法,請告訴我。
編輯:謝謝大家的幫助。我找出了問題所在。我想這是我的錯,因爲我沒有提供足夠的細節。我的兩張卡是JScrollPane
,我還需要查看其內容,以確定這些面板之一是否是我所看到的。我沒有檢查滾動窗格本身的isVisible()
,我一直在看它的爭論總是可見的,它是我需要驗證的可見性的滾動窗格。
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}
@RD,代碼片段來自嘗試使用CardLayout的JPanel中的getCurrentPanel()方法。我爲其他原因擴展了JPanel,所以我可以訪問它。 – alexcoco 2010-12-10 22:09:55
好吧,沒有看到你所有的代碼,我不能告訴你出了什麼問題,但我可以告訴你,我的TestFrame代碼一次只能正確找到一張可見卡。 – 2010-12-10 22:11:55
@alexcoco,編輯將相關代碼放入getCurrentCard()方法中。 – 2010-12-10 22:18:38