2011-12-05 33 views
1

我找不到CardLayout的JavaDocs。我有一個Applet,從這個Applet我有5個我創建的類擴展JPanel。在這些類中,迄今爲止所做的一切都是設計(一些GUI組件)。現在我想通過Applet將所有這些類連接在一起,以便一次查看一個面板(CardLayout)。因此,我將從我的Applet中使用CardLayout的下一個方法來查看下一個面板。這裏是我的代碼:使用CardLayout將自定義面板添加到Applet

setLayout(new CardLayout()); 

add(mainView);    //mainView, managerView, searchView, storesView and hoursView 
add(managerView);    // are initialized 
add(searchView); 
add(storesView); 
add(hoursView); 

這裏是我的事件處理代碼:

public void actionPerformed(ActionEvent e) 
{ 
    CardLayout cl;      //CardLayout object to manipulate the next page 

    cl = (CardLayout)(this.getLayout()); 

    if(e.getSource() == mainView.getManagerButton()) 
    { 
     cl.next(this); 
    } 
    if(e.getSource() == mainView.getSearchButton()) 
    { 
     cl.next(this);    //if the user hits the searchButton I want to link to panel 
     cl.next(this);    // searchView. Is that correct? 
    } 
} 

有了這個代碼,我得到一個IllegalArgumentException

有人請指出我的錯誤!我還在代碼中提供了一些關於問題的評論。 一如既往,謝謝!

+1

哪條線顯示了錯誤呢?什麼是確切的錯誤信息?你看過我在另一個問題中鏈接到的CardLayout教程嗎? –

回答

2

將面板添加到卡片佈局時,您沒有使用任何約束來標識每張卡片。然後你可以直接跳到特定的卡。

查看How to Use Card Layout的工作示例。

+1

我給他在他以前的線程鏈接... –

+0

我不明白鏈接中的約束。在教程中,他們使用CardLayout將「cards」初始化爲JPanel。接下來,他們將另外兩個JPanels card1和card2添加到具有靜態最終字符串的卡片作爲第二個參數。我不明白他們爲什麼添加該靜態字符串。此外,編譯器給我這個消息:java.lang.IllegalArgumentException:不能添加到佈局:約束必須是一個字符串 – codeMasterFiveThousand

+0

約束只是卡的字符串標識符。它更容易使用字符串值的靜態變量,所以你不必在兩個地方輸入字符串值。它避免了輸入錯誤。如果您收到錯誤消息,請執行消息所說的內容。使用一個字符串作爲約束。 – camickr

0

爲了使其更加明確,一些片段從字面上由@camickr

創作面板

//Create the panel that contains the "cards". 
cards = new JPanel(new CardLayout()); 
cards.add(card1, BUTTONPANEL); 
cards.add(card2, TEXTPANEL); 

其中BUTTONPANELTEXTPANEL是字符串提供的鏈接複製。在不同的面板之間的切換是通過調用

CardLayout cl = (CardLayout)(cards.getLayout()); 
cl.show(cards, (String)evt.getItem()); 

其中evt.getItem()將等於BUTTONPANELTEXTPANEL

+0

嘿,我還是不明白。我嘗試了一個擴展JPanel的兩個類的簡化示例,然後使用constrait「Next」將它們添加到applet中,這是我按鈕上的文本。爲什麼這不起作用?我得到了一個非法的參數異常,消息無法從borderlayout轉換爲cardlayout – codeMasterFiveThousand

+0

如何在評論中發佈代碼? – codeMasterFiveThousand

+0

'public void init(){ setLayout(new CardLayout()); titleView = new titlePanel(); titleView.next.addActionListener(this); contentView = new contentPanel(); contentView。next.addActionListener(本); add(titleView,「Next」); add(contentView,「Next」); } public void actionPerformed(ActionEvent e) CardLayout cl =(CardLayout)(this.getLayout()); cl.show(this,「Next」); }' – codeMasterFiveThousand

相關問題