要实现一个界面,内容有5个JLabel,5个文本框,一一对应,还加一个登录按钮,我的布局思想是把一个JLabel与一个JTextField放在一个JPanel里,再把这些JPanel放在设为盒布局的JFrame里,下面的代码为什么说:BoxLayout can't be shared,请各位帮帮忙!不胜感激!(JDK版本是1.6)
import javax.swing.*;
import java.awt.*;public class jiemian extends JFrame{
    public jiemian() {
    super("职员信息注册");
    JFrame JF=new JFrame();
 
    JPanel jp1=new JPanel();
    JPanel jp2=new JPanel();
    JPanel jp3=new JPanel();
    JPanel jp4=new JPanel();
    JPanel jp5=new JPanel();
   
    
    JLabel empName=new JLabel("empName");
    JLabel empSex=new JLabel("empSex");
    JLabel empAge=new JLabel("empAge");
    JLabel empTel=new JLabel("empTel");
    JLabel empAddress=new JLabel("empAddress");
    
    JTextField jf1=new JTextField(20);
    JTextField jf2=new JTextField(20);
    JTextField jf3=new JTextField(20);
    JTextField jf4=new JTextField(20);
    JTextField jf5=new JTextField(20);
    
    JButton sure=new JButton("Login");
 
    jp1.add(empName);
    jp2.add(empSex);
    jp3.add(empAge);
    jp4.add(empTel);
    jp5.add(empAddress);
    
    jp1.add(jf1);
    jp2.add(jf2);
    jp3.add(jf3);
    jp4.add(jf4);
    jp5.add(jf5);
    
    add(jp1);
    add(jp2);
    add(jp3);
    add(jp4);
    add(jp5);
    add(sure);
     
    BoxLayout box=new BoxLayout(JF,BoxLayout.Y_AXIS);
    setLayout(box);
    
    setSize(400,300);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    }
}

解决方案 »

  1.   

    JPanel panel1 = new JPanel(new GridLayout(4,2));...// add Jlabel jtextfield
    JPanel panel = new JPanel(new BorderLayout());
    panel.add(panel1,BorderLayout.CENTER);
    panel.add(new JButton("login"),BorderLayout.SOUTH);frame.setContentPane(panel);
      

  2.   

    BoxLayout box=new BoxLayout(JF,BoxLayout.Y_AXIS); //这名话的问题.
    setLayout(box); /**
         * Creates a layout manager that will lay out components along the
         * given axis.  
         *
         * @param target  the container that needs to be laid out
         * @param axis  the axis to lay out components along. Can be one of:
         *              <code>BoxLayout.X_AXIS</code>,
         *              <code>BoxLayout.Y_AXIS</code>,
         *              <code>BoxLayout.LINE_AXIS</code> or
         *              <code>BoxLayout.PAGE_AXIS</code>
         *
         * @exception AWTError  if the value of <code>axis</code> is invalid 
         */
        public BoxLayout(Container target, int axis) {
    //你的JF对象与上面的setLayout(box);不是同一个target 
    //setLayout(box);是设置在jiemian的Container void checkContainer(Container target) {
            if (this.target != target) {
                throw new AWTError("BoxLayout can't be shared");
            }
        }
    //两个target不相同造成的.
    //JFrame JF=new JFrame(); 这个去掉.
    //把它改成BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
    //你的当前类就是一个JFrame.为什么不直接用它呢?你的程序不也是直接把其它的组件添加到当前的JFrame中的吗?
    //为什么要用到这个JF?要做成什么样子.把思路理一下.
      

  3.   

    JFrame不能直接用add()添加组件,应先用getContentPane()获得它的内容面板再添加!
      

  4.   

    import javax.swing.*; 
     public class jiemian extends JFrame{ 
        /**
     * 
     */
    private static final long serialVersionUID = -7664253667218711192L; public jiemian() { 
        super("职员信息注册"); 
          JPanel jp1=new JPanel(); 
        JPanel jp2=new JPanel(); 
        JPanel jp3=new JPanel(); 
        JPanel jp4=new JPanel(); 
        JPanel jp5=new JPanel(); 
      
        
        JLabel empName=new JLabel("empName"); 
        JLabel empSex=new JLabel("empSex"); 
        JLabel empAge=new JLabel("empAge"); 
        JLabel empTel=new JLabel("empTel"); 
        JLabel empAddress=new JLabel("empAddress"); 
        
        JTextField jf1=new JTextField(20); 
        JTextField jf2=new JTextField(20); 
        JTextField jf3=new JTextField(20); 
        JTextField jf4=new JTextField(20); 
        JTextField jf5=new JTextField(20); 
        
        JButton sure=new JButton("Login");     jp1.add(empName); 
        jp2.add(empSex); 
        jp3.add(empAge); 
        jp4.add(empTel); 
        jp5.add(empAddress); 
        
        jp1.add(jf1); 
        jp2.add(jf2); 
        jp3.add(jf3); 
        jp4.add(jf4); 
        jp5.add(jf5); 
        
        getContentPane().add(jp1); 
        getContentPane().add(jp2); 
        getContentPane().add(jp3); 
        getContentPane().add(jp4); 
        getContentPane().add(jp5); 
        getContentPane().add(sure); 
        
        BoxLayout box=new BoxLayout(getContentPane(),BoxLayout.Y_AXIS); 
        getContentPane().setLayout(box); 
        
        setSize(400,300); 
        setVisible(true); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setLocationRelativeTo(null); 
        } 

    //按你原始的思想的改动.
      

  5.   

    根据你的描述,建议,采用GroupLauout
      

  6.   

    谢谢大家的付出,我按6楼的在BoxLayout()里的参数加了一个this.getContentPane()就成了,
    现在的JDK1.6是不要获取中间面板的,还有11楼的朋友说的布局是GridBagLayout吗?你说的是GroupLauout我没用过,受教了!