2013-04-07 67 views
0

我已經創建了一個包含多個JPanel的類,並且我想使用cardLayout在這些JPanel之間切換。每個Jpanel和cardLayout都是他們自己的方法。當我點擊任何按鈕時,它應該顯示下一個Jpanel,但沒有。什麼是我沒有得到這裏JPanels將不會在cardLayout中切換

import javax.swing.*; 
import java.awt.*; 
import java.awt.CardLayout; 
import java.awt.Component; 
import java.awt.event.*; 

public class guiFrames extends JFrame implements ActionListener{ 

    String name = "login"; 
    JButton loginSubmit, list; 
    JPanel cardGUI; 
    CardLayout cards; 

    public guiFrames(){ 
    } 

    public Component inputFrame(){ 

    JPanel inputPnl = new JPanel(); 
    inputPnl.setLayout(new GridLayout(3,2)); 

    JLabel loginLbl = new JLabel("Login"); 
    inputPnl.add(loginLbl); 
    JTextField loginTxt = new JTextField(); 
    inputPnl.add(loginTxt); 
    JLabel pwLbl = new JLabel("Password"); 
    inputPnl.add(pwLbl); 
    JTextField pwTxt = new JTextField(); 
    inputPnl.add(pwTxt); 

    JPanel buttonPnl = new JPanel(); 
    buttonPnl.setLayout(new FlowLayout(FlowLayout.LEFT, 1,5)); 

    loginSubmit = new JButton("Submit"); 
    buttonPnl.add(loginSubmit); 
    JButton loginCancel = new JButton("Cancel"); 
    buttonPnl.add(loginCancel); 

    JPanel container = new JPanel(); 
    container.setLayout(new BorderLayout()); 
    container.add(inputPnl, BorderLayout.CENTER); 
     container.add(buttonPnl, BorderLayout.SOUTH); 

     container.setVisible(true); 

    return container; 
    } 

    public Component issueList(){ 

    JPanel listPnl = new JPanel(); 

    JPanel listFlow = new JPanel(); 
    listFlow.setLayout(new FlowLayout(FlowLayout.LEFT, 1,5)); 

    JButton newIssue = new JButton("New"); 
    listFlow.add(newIssue); 
    list = new JButton("Issues"); 
    listFlow.add(list); 
    JButton newUser = new JButton("Add User"); 
    listFlow.add(newUser); 


    JPanel container = new JPanel(); 
    container.setLayout(new BorderLayout()); 
    container.add(listFlow, BorderLayout.SOUTH); 

    listPnl.add(container); 
// listPnl.pack(); 
    listPnl.setVisible(true); 
// listPnl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    return listPnl; 
} 

    public Component issueDetails(){ 
    JList list = new JList(); 

    JPanel detailsFlow = new JPanel(); 
    detailsFlow.setLayout(new FlowLayout(FlowLayout.LEFT, 1,5)); 

    JButton detailsCancel = new JButton("Cancel"); 
    detailsFlow.add(detailsCancel); 
    JButton detailsSubmit = new JButton("Submit"); 
    detailsFlow.add(detailsSubmit); 
    JButton detailsAssign = new JButton("Assign"); 
    detailsFlow.add(detailsAssign); 
    JButton detailsClose = new JButton("Close"); 
    detailsFlow.add(detailsClose); 
    JButton detailsValidate = new JButton("Validate"); 
    detailsFlow.add(detailsValidate); 
    JButton detailsFail = new JButton("Fail"); 
    detailsFlow.add(detailsFail); 
     detailsFail.setVisible(false); 

    JPanel container = new JPanel(); 
    container.setLayout(new BorderLayout()); 
    container.add(detailsFlow, BorderLayout.SOUTH); 
    container.add(list, BorderLayout.CENTER); 

    container.setVisible(true); 

    return container; 

    } 

    public Component addUser(){ 

    JPanel addUserGrid = new JPanel(); 
    addUserGrid.setLayout(new GridLayout(3,2)); 


    JLabel loginLbl = new JLabel("Login"); 
    addUserGrid.add(loginLbl); 
    JTextField loginTxt = new JTextField(); 
    addUserGrid.add(loginTxt); 
    JLabel pwLbl = new JLabel("Password"); 
    addUserGrid.add(pwLbl); 
    JTextField pwTxt = new JTextField(); 
    addUserGrid.add(pwTxt); 

    JLabel userLbl = new JLabel("User Type"); 
    addUserGrid.add(userLbl); 
    JComboBox userCmb = new JComboBox(); 
    userCmb.addItem("User"); 
    userCmb.addItem("Manager"); 
    userCmb.addItem("Developer"); 
    addUserGrid.add(userCmb); 

    JPanel addUserFlow = new JPanel(); 
    addUserFlow.setLayout(new FlowLayout(FlowLayout.LEFT, 1,5)); 

    JButton addUserCancel = new JButton("Cancel"); 
    addUserFlow.add(addUserCancel); 
    JButton addUserSubmit = new JButton("Submit"); 
    addUserFlow.add(addUserSubmit); 

    JPanel container = new JPanel(); 
    container.setLayout(new BorderLayout()); 
    container.add(addUserFlow, BorderLayout.SOUTH); 
    container.add(addUserGrid, BorderLayout.CENTER); 

    container.setVisible(true); 

    return container; 
    } 

    public void cardView(){ 
     JFrame cardFrame = new JFrame(name); 
     cardGUI = new JPanel(); 
     cards = new CardLayout(); 
     cardGUI.setLayout(cards); 
     cardGUI.add(inputFrame(), "login"); 
    cardGUI.add(issueList(), "issueList"); 
    cardGUI.add(issueDetails(), "issueDetails"); 
    cardGUI.add(addUser(), "addUser"); 

     cardFrame.add(cardGUI, BorderLayout.CENTER); 
     cardFrame.pack(); 
     cardFrame.setVisible(true); 
     cardFrame.setDefaultCloseOperation(cardFrame.EXIT_ON_CLOSE); 

    cards.show(cardGUI, name); 
    } 

    public void actionPerformed(ActionEvent e){ 
    if(e.getSource() == loginSubmit){ 
     cards.show(cardGUI, "IssueList"); 
    }else if(e.getSource() == list){ 
     name = "issueDetails"; 
    } 
    } 
} 

回答

3

When I click on any button it should display the next Jpanel but doesn't.

我沒有看到任何button.addActionListener(...)語句。

閱讀有關How to Write an Action Listener的Swing教程中的部分以獲取更多信息。

編輯:

它看起來像你試圖顯示的卡不存在。卡名稱錯誤。這就是爲什麼很多人使用靜態最終常數,所以你不會犯一個打字錯誤:

cardGUI.add(issueList(), "issueList"); 
... 
cards.show(cardGUI, "IssueList"); 
+0

你是對的....我忘了補充一點。所以我添加了loginSubmit.addActionListener(this);代碼但面板仍然不切換 – kyros 2013-04-07 18:28:26

+0

@ user1319532,也許編輯將有所幫助。如果沒有,那麼發佈你的'SSCCE',因爲我們不能繼續猜測。 – camickr 2013-04-07 18:47:53

+0

是的,這工作。感謝編輯! – kyros 2013-04-07 22:55:52