2013-12-17 42 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教程的部分以获取更多信息和示例。