2013-12-17 114 views
0

我是初學java的。在第二個面板中,用戶名和密碼對齊不正確。有什麼方法可以解決它嗎?我也想知道使用多個框架的缺點。CardLayout對齊不正確

import java.awt.*; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.*; 

    public class CardLayoutTest extends JFrame { 

     private static final long serialVersionUID = 1L; 
     private JPanel cardPanel, jp1, jp2, buttonPanel; 
     private JLabel jl1, jl2; 
     private JTextField jt1; 
     private JPasswordField jt2; 
     private JButton btn1, btn2; 
     private CardLayout cardLayout = new CardLayout(); 

     public CardLayoutTest() { 
      setTitle("Login"); 
      setSize(400, 300); 
      cardPanel = new JPanel(); 
      buttonPanel = new JPanel(); 
      cardPanel.setLayout(cardLayout); 
      jp1 = new JPanel(); 
      jp2 = new JPanel(); 
      jt1=new JTextField(); 
      jt2=new JPasswordField(); 
      jl1 = new JLabel("Username"); 
      jl2 = new JLabel("Password"); 
      //jp1.add(jl1); 
      jp2.add(jl1); 
      jp2.add(jt2); 
      jp2.add(jl2); 
      jp2.add(jt2); 
      cardPanel.add(jp1, "1"); 
      cardPanel.add(jp2, "2"); 
      btn2 = new JButton("Show Card 2"); 
      btn2.addActionListener(new ActionListener() { 

       public void actionPerformed(ActionEvent e) { 
        cardLayout.show(cardPanel, "2"); 
       } 
      }); 
      buttonPanel.add(btn2); 
      add(cardPanel, BorderLayout.CENTER); 
      add(buttonPanel, BorderLayout.SOUTH); 
     } 

     public static void main(String[] args) { 
      EventQueue.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        CardLayoutTest frame = new CardLayoutTest(); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setVisible(true); 
       } 
      }); 
     } 
    } 

回答

2

在第二CardPanel都的用戶名和密碼排列不來了正常。

默認情況下,JPanel使用FlowLayout,因此組件顯示在一行上。

有什麼方法可以解決它嗎?

使用適當的佈局管理器(或佈局管理器的組合)來獲得所需的對齊。

閱讀有關Layout Managers的Swing教程的部分以獲取更多信息和示例。