Защо всички мои GUI компоненти се преместват в горния ляв ъгъл на моя JFrame, когато пиша в текстова област?

Нов съм в Java и Stack Overflow и правя регистрационен формуляр, който ще събира потребителски данни и ще ги съхранява в JLabels в произтичащ прозорец. Всеки прозорец се изработва в отделен клас. Имам бутон за изпращане в оригиналния прозорец, чийто код е показан по-долу, който извиква получения прозорец, като поставя потребителските данни, събрани от текстовите полета и области, и ги поставя в JLabels.

Въпросът ми е: Как така, когато пиша в една от моите текстови области, всички мои компоненти се преместват в горния ляв ъгъл на прозореца?

Преди работеше добре. Това беше, докато не промених оформлението си от null на spring и спрях да разширявам от JFrame и вместо това направих JFrame обект. Засега другият ми клас е добре и само този ми създава проблеми.

Това е кодът за оригиналния прозорец, където потребителят ще въвежда текст:

public class RegistrationForm1{
private JFrame frame;
private JButton submit;
private JLabel fnLabel, lnLabel, dobLabel, phoneLabel, cellLabel, 
ecLabel, ecnLabel, employerLabel, workLabel, alLabel, 
rLabel, ptlLabel, pcpLabel, pcpPhoneLabel;
private JTextArea alBox, rBox; 
private JTextField fnBox, lnBox, dobBox, phoneBox, cellBox, 
ecBox, ecnBox, employerBox, workBox, ptlBox, pcpBox, 
pcpPhoneBox;

public RegistrationForm1(){

    frame = new JFrame("RegistrationForm");
    frame.setLayout(new SpringLayout());
    frame.setSize(500, 570);
    frame.setResizable(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

}

public void CloseFrame(){
    frame.dispose();
}

public void form1(){

    fnLabel = new JLabel("First Name: ");
    fnLabel.setBounds(114, 0, 100, 50);
    frame.add(fnLabel);
    fnBox = new JTextField(20);
    fnBox.setBounds(185, 15, 100, 20);
    fnBox.setEditable(true);
    frame.add(fnBox);

    lnLabel = new JLabel("Last Name: ");
    lnLabel.setBounds(115, 30, 100, 50);
    frame.add(lnLabel);
    lnBox = new JTextField(20);
    lnBox.setBounds(185, 47, 100, 20);
    lnBox.setEditable(true);
    frame.add(lnBox);

    dobLabel = new JLabel("Date of Birth: ");
    dobLabel.setBounds(101, 60, 100, 50);
    frame.add(dobLabel);
    dobBox = new JTextField(10);
    dobBox.setBounds(185, 77, 100, 20);
    dobBox.setEditable(true);
    frame.add(dobBox);

    phoneLabel = new JLabel("Phone#: ");
    phoneLabel.setBounds(134, 90, 100, 50);
    frame.add(phoneLabel);
    phoneBox = new JTextField(10);
    phoneBox.setBounds(185, 105, 130, 20);
    phoneBox.setEditable(true);
    frame.add(phoneBox);

    cellLabel = new JLabel("Cell#: ");
    cellLabel.setBounds(148, 120, 100, 50);
    frame.add(cellLabel);
    cellBox = new JTextField(10);
    cellBox.setBounds(185, 135, 130, 20);
    cellBox.setEditable(true);
    frame.add(cellBox);

    ecLabel = new JLabel("Emergency Contact: ");
    ecLabel.setBounds(59, 150, 200, 50);
    frame.add(ecLabel);
    ecBox = new JTextField(20);
    ecBox.setBounds(185, 165, 200, 20);
    ecBox.setEditable(true);
    frame.add(ecBox);

    ecnLabel = new JLabel("Emergency Contact Number: ");
    ecnLabel.setBounds(5, 180, 300, 50);
    frame.add(ecnLabel);
    ecnBox = new JTextField(20);
    ecnBox.setBounds(185, 197, 150, 20);
    ecnBox.setEditable(true);
    frame.add(ecnBox);

    employerLabel = new JLabel("Employer: ");
    employerLabel.setBounds(121, 210, 100, 50);
    frame.add(employerLabel);
    employerBox = new JTextField(20);
    employerBox.setBounds(185, 225, 200, 20);
    employerBox.setEditable(true);
    frame.add(employerBox);

    workLabel = new JLabel("Work#: ");
    workLabel.setBounds(139, 240, 100, 50);
    frame.add(workLabel);
    workBox = new JTextField(10);
    workBox.setBounds(185, 255, 150, 20);
    workBox.setEditable(true);
    frame.add(workBox);

    alLabel = new JLabel("Allergies: ");
    alLabel.setBounds(124, 270, 100, 50);
    frame.add(alLabel);
    alBox = new JTextArea();
    alBox.setBounds(185, 285, 200, 50);
    alBox.setEditable(true);
    frame.add(alBox);

    rLabel = new JLabel("Reason for visit: ");
    rLabel.setBounds(81, 330, 120, 50);
    frame.add(rLabel);
    rBox = new JTextArea();
    rBox.setBounds(185, 350, 200, 50);
    rBox.setEditable(true);
    frame.add(rBox);

    ptlLabel = new JLabel("Pain Threshold Level: ");
    ptlLabel.setBounds(50, 394, 150, 50);
    frame.add(ptlLabel);
    ptlBox = new JTextField();
    ptlBox.setBounds(185, 410, 30, 20);
    ptlBox.setEditable(true);
    frame.add(ptlBox);

    pcpLabel = new JLabel("Primary Care Physician: ");
    pcpLabel.setBounds(35, 420, 150, 50);
    frame.add(pcpLabel);
    pcpBox = new JTextField(20);
    pcpBox.setBounds(185, 440, 200, 20);
    pcpBox.setEditable(true);
    frame.add(pcpBox);

    pcpPhoneLabel = new JLabel("PCP Phone#: ");
    pcpPhoneLabel.setBounds(103, 450, 100, 50);
    frame.add(pcpPhoneLabel);
    pcpPhoneBox = new JTextField(10);
    pcpPhoneBox.setBounds(185, 470, 150, 20);
    pcpPhoneBox.setEditable(true);
    frame.add(pcpPhoneBox);

    submit = new JButton("Submit");
    submit.setBounds(200, 500, 70, 40);
    frame.add(submit);
    submit.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    RegistrationForm2 apollo = new RegistrationForm2();
                    apollo.form2(fnBox, lnBox, dobBox, phoneBox, cellBox, 
                            ecBox, ecnBox, employerBox, workBox, alBox, rBox, 
                            ptlBox, pcpBox, pcpPhoneBox);
                    CloseFrame();
                }
            }
            );
}
}

person Shad0wSt4R    schedule 05.11.2014    source източник
comment
Това е, защото използвате оформления погрешно. Отървете се от setBounds(...) и всяка идея за абсолютно позициониране и вместо това използвайте оформленията по интелигентен начин, за да им позволите да позиционират вашите компоненти и да оразмерят подходящо вашия GUI. Уроците ще ви насочат как да ги използвате.   -  person Hovercraft Full Of Eels    schedule 06.11.2014
comment
Ако искате да използвате SpringLayout, тогава трябва да посочите ограничения за оформлението. Предлагам ви да започнете, като прочетете урока за Swing в Layout Manager за да разберете по-добре как работят. След това разгледайте примерите на SpringLayout.   -  person camickr    schedule 06.11.2014