2017-03-02 181 views
-2

好的,我正在使用卡布局將面板從1個面板切換到第二個面板&,然後切換到第三個面板。我一直在網上查找,但我無法找到我正在尋找的東西。我希望我的面板處於不同的類別,並使用按鈕切換到不同的面板來回切換。我發現了幾個來源,但所有面板都添加到原始面板,然後使用原始面板上的相同按鈕切換到不同面板。使用卡布局的Java GUI切換面板

(即)面板2使用按鈕從面板1切換到面板3和麪板3使用按鈕從面板1切換到面板4和麪板4使用按鈕從面板1切換回面板2.

但它應該是面板1使用面板1上的按鈕切換到面板2,面板2使用面板2上的按鈕切換到面板3,面板3應使用面板3上的按鈕切換到面板1,這意味着在那裏應該不需要第四個面板。

我的問題是我想使用不同的按鈕來回切換,而不是相同的按鈕,因爲我打算在每個面板的每個按鈕中寫入額外的代碼。因爲我基本上想要創建3個面板,所以一旦細節被添加到註冊表單中,並且用戶點擊註冊,細節被添加到數據庫,然後它切換到登錄面板並關閉註冊面板。 如果登錄面板與數據庫中的條目匹配,則會輸入用戶名和密碼,並且用戶單擊登錄後會轉到新面板並關閉登錄面板。

現在我已經完成註冊和登錄階段,它只是從1個面板切換到另一個是問題。有沒有辦法使用卡布局,所以你切換到不同的面板使用不同的按鈕爲每個面板來做到這一點,還是有一些其他方法用來做到這一點。

如果需要,我可以追加我的代碼。但它連接到一個數據庫,所以它不會在沒有數據庫的情況下編譯。

+0

另外值得一提的我是新來使用卡片佈局,因爲我通常使用多個幀每雖然我知道它不好的編程框架之間切換。 – William

+0

我基本上想要做什麼splungebob問在堆棧溢出早期問題莫名其妙未必與卡布局http://stackoverflow.com/questions/15840686/cardlayout-switch-between-jpanels-by-buttonclick – William

+0

*「我可以如果需要附加我的代碼。但它連接到數據庫,所以它不會在沒有數據庫的情況下進行編譯。「* 1)我們不希望代碼轉儲,發佈[MCVE]或[簡短自包含正確示例](http:// www .sscce.org /)。2)用一些硬編碼數據替換數據庫。 –

回答

0

你最初需要一個4.面板女巫包含3個面板,並有cardLayout。

要從卡片中更換卡片,您需要使用next()方法移交一個actionlistener。我做了一個小而不美觀的例子來展示我的意思;-)

public class CardExample{ 

private class panel extends JPanel{ 

    private panel(ActionListener alNext, String text){ 
     JButton buttonNext = new JButton("next"); 
     buttonNext.addActionListener(alNext); 

     JLabel textLabel = new JLabel(text); 

     this.add(textLabel); 
     this.add(buttonNext); 
    } 
} 

public CardExample(){} 

public static void main(String[] args){ 

    CardExample ce = new Cardexample(); 
    ce.myGUI(); 
} 

private void myGUI() { 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
    frame.setSize(200, 200); 

    CardLayout cardLayout = new CardLayout(); 

    frame.getContentPane().setLayout(cardLayout); 

    ActionListener al = e -> cardLayout.next(frame.getContentPane()); 

    frame.getContentPane().add(new panel(al, "Panel 1")); 
    frame.getContentPane().add(new panel(al, "Panel 2")); 
    frame.getContentPane().add(new panel(al, "Panel 3")); 

    frame.setVisible(true); 
} 

} 
0

不管按鈕位於同一個面板還是不同的面板都是不相關的。

該按鈕只是從佈局管理器執行一個方法。您可以使用:

  1. 下一個(...) - 走在了CardLayout下一個面板,或
  2. 秀(...) - 顯示在CardLayout特定面板。

如果您無法使用CardLayout訪問面板,則可以輕鬆獲取該面板。在ActionListener的爲你的按鈕,你可以這樣做:

JButton button = (JButton)event.getSource(); 
JPanel buttonPanel = (JPanel)button.getParent(); 
JPanel cardPanel = (JPanel)buttonPanel.getParent(); 
CardLayout layout = (CardLayout)cardPanel.getLayout(); 
layout.next(cardPanel);