2013-04-20 85 views
0

我正在做一個數據庫的表單,我想使用CardLayout。 我解釋了這種情況:用戶有兩種選擇:要麼連接到他的帳戶,要麼他是新的,他需要創建一個帳戶。 我有一個窗體的第一個面板和另一個測試(其中我設置背景爲黑色,以便在用戶單擊New按鈕時查看更改)。當我啓動主程序時,我只是帶有標題的窗口,沒有別的。或者它不是我想要的,我的應用程序的第一步是顯示錶單。因此,如果任何人都可以解釋我哪裏是我的錯誤,我把它:)CardLayout沒有顯示JPanel

public class Accueil extends JFrame implements ActionListener { 

    private CardLayout l = new CardLayout(); 
    private JPanel main = new JPanel(l); 
    private JPanel change = new JPanel(); 
    private JPanel home = new JPanel(new BorderLayout()); 
    private JPanel title = new JPanel(); 
    private JPanel login = new JPanel(new BorderLayout()); 
    private JPanel login_title = new JPanel(); 
    private JPanel login_info = new JPanel(); 
    private JPanel copyright = new JPanel(); 
    private JLabel welcome = new JLabel("TEST"); 
    private JLabel connexion = new JLabel("Connexion"); 
    private JLabel mail = new JLabel("Mail : "); 
    private JTextField input_mail = new JTextField(); 
    private JLabel mdp = new JLabel("Password : "); 
    private JTextField input_mdp = new JTextField(); 
    private JLabel who = new JLabel ("Are you a : "); 
    private JRadioButton client = new JRadioButton("Client", true); 
    private JRadioButton developpeur = new JRadioButton("Developer", false); 
    private ButtonGroup bg = new ButtonGroup(); 
    private JButton ok = new JButton("Login"); 
    private JButton annule = new JButton("Cancel"); 
    private JButton inscription = new JButton("New ?"); 
    private JLabel align = new JLabel(""); 

    public Accueil() { 

     init_title(); 
     init_login(); 
     add_button(); 
     organize_frame(); 
     inscription.addActionListener(this); 
     main.add(home, "Home"); 
     main.add(change, "Change"); 
     l.show(main, "Home"); 
     change.setBackground(Color.black); 
     this.setTitle("test"); 
     this.setSize(600,600); 
     this.setLocationRelativeTo(null); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent arg0) { 
     l.show(main, "Change"); 
    } 

    private void organize_frame() { 
     home.add(title, BorderLayout.NORTH); 
     home.add(login, BorderLayout.CENTER); 
     home.add(copyright, BorderLayout.SOUTH); 
    } 

    private void init_title() { 
     welcome.setFont(build_font(35)); 
     welcome.setBorder(new EmptyBorder(20,0,0,0)); 
     title.setPreferredSize(new Dimension(600,80)); 
     title.add(welcome); 
    } 

    private void init_login() { 
     setConnexion(); 
     user_input(); 
     align.setPreferredSize(new Dimension(215,50)); 
     organize_button(); 
     login.add(login_title, BorderLayout.NORTH); 
     login.add(login_info, BorderLayout.CENTER); 
    } 

    private void setConnexion() { 
     connexion.setFont(build_font(30)); 
     connexion.setBorder(new EmptyBorder(20,0,0,0)); 
     login_title.add(connexion); 
     login_title.setPreferredSize(new Dimension(600,100)); 
    } 

    private void user_input() { 
     who.setFont(build_font(25)); 
     mail.setFont(build_font(25)); 
     mail.setBorder(new EmptyBorder(0,120,0,0)); 
     mdp.setFont(build_font(25)); 
     input_mdp.setFont(build_font(25)); 
     input_mail.setFont(build_font(25)); 
     input_mail.setPreferredSize(new Dimension(300,40)); 
     input_mdp.setPreferredSize(new Dimension(300,40)); 
     who.setFont(build_font(20)); 
     client.setFont(build_font(20)); 
     developpeur.setFont(build_font(21)); 
     login_info.add(who); 
     login_info.add(client); 
     login_info.add(developpeur); 
     login_info.add(mail); 
     login_info.add(input_mail); 
     login_info.add(mdp); 
     login_info.add(input_mdp); 
     login_info.add(align); 
    } 

回答

3

你在哪裏添加CardLayout-使用的JPanel,主,什麼嗎?

答:你不知道。要使其工作,必須將其添加到最終導致頂級窗口的組件中。必須顯示它以便顯示其「卡片」。

+0

哦大** **,愚蠢的錯誤!感謝您的幫助 – afk 2013-04-20 12:48:07

+0

@ user1086267:不客氣。當遇到這樣的問題時,儘量簡化代碼以儘量解決問題的實質。通過這種方式,您可能會一眼就看到問題及其解決方案,如果不能,則可以發佈編譯和運行的簡單小代碼,並可用於幫助您解決問題。 – 2013-04-20 12:49:33