2017-01-11 3 views
1

Я пытаюсь вызвать метод, который открывает новый существующий фрейм, но все, что я получаю, это пустой кадр без содержимого.Java Swing open существующая форма

Это код, который вызывает функцию, когда кнопка preesed:

JButton btnPersonalInfo = new JButton("Personal Info"); 
btnPersonalInfo.setBounds(10, 5, 120, 23); 
btnPersonalInfo.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     JFrame PersonalInfo = new JFrame("Personal Info"); 
     PersonalInfo content = new PersonalInfo(); 
     PersonalInfo.setContentPane(content); 
     PersonalInfo.setSize(700,700); 
     PersonalInfo.setLocation(100,15); 
     PersonalInfo.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
     PersonalInfo.setResizable(false); 
     PersonalInfo.setVisible(true); 
    } 
}); 
panel_1.add(btnPersonalInfo); 

Это, как я инициализировать PersonalInfo функцию:

public PersonalInfo() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel(); 
     frame.getContentPane().add(panel, BorderLayout.CENTER); 
     panel.setLayout(null); 

     JLabel lblPersonalInfo = new JLabel("Personal Information"); 
     lblPersonalInfo.setFont(new Font("Arial", Font.BOLD, 16)); 
     lblPersonalInfo.setBounds(110, 11, 185, 14); 
     panel.add(lblPersonalInfo); 

     JLabel lblFullName = new JLabel("Full Name"); 
     lblFullName.setBounds(10, 36, 58, 14); 
     panel.add(lblFullName); 

     JLabel lblNationality = new JLabel("Nationality"); 
     lblNationality.setBounds(10, 61, 78, 14); 
     panel.add(lblNationality); 

     JLabel lblDateBirth = new JLabel("Date of Birth"); 
     lblDateBirth.setBounds(10, 86, 78, 14); 
     panel.add(lblDateBirth); 

     JLabel lblGender = new JLabel("Gender"); 
     lblGender.setBounds(10, 111, 46, 14); 
     panel.add(lblGender); 

     JLabel lblAddress = new JLabel("Address"); 
     lblAddress.setBounds(10, 164, 58, 14); 
     panel.add(lblAddress); 

     JLabel lblMobile = new JLabel("Mobile"); 
     lblMobile.setBounds(10, 189, 46, 14); 
     panel.add(lblMobile); 

     JLabel lblEmail = new JLabel("E-mail"); 
     lblEmail.setBounds(10, 214, 46, 14); 
     panel.add(lblEmail); 

     JRadioButton rdbtnM_2 = new JRadioButton("M"); 
     rdbtnM_2.setBounds(74, 133, 109, 23); 
     panel.add(rdbtnM_2); 

     JRadioButton rdbtnF = new JRadioButton("F"); 
     rdbtnF.setBounds(74, 107, 109, 23); 
     panel.add(rdbtnF); 
    } 
} 

В основном я ожидал увидеть кадр от метода PersonalInfo, когда я нажимаю кнопку btnPersonalInfo, и сейчас я получаю пустой кадр.

Благодарим вас и пожалеете, если это дубликат, но это мой первый вопрос.

+0

PersonalInfo класс не является функцией – dahui

+4

1) См [Использование нескольких JFrames, хорошо/плохо Практика?] (Http://stackoverflow.com/q/9554636/418556) 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org /). 3) Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

+2

4) * «.. извините, если это дубликат ..» * Нет необходимости в извинениях, есть окно поиска в правом верхнем углу страницы, и при вводе вопроса возможные дубликаты отображаются под текстом сообщения. коробка. 5) ** Кажется вероятным, что 'PersonalInfo' расширяет' JFrame', и это большая часть этой проблемы, учитывая, что метод 'initialize()' создает и настраивает кадр, который никогда не устанавливается видимым. Я не уверен, что это ответ на заданный вопрос, если нет MCVE, и никаких вопросов. ** –

ответ

2

Удалить frame = new JFrame(); из ваших initialize()

Simply:

JPanel panel = new JPanel(); 
    add(panel, BorderLayout.CENTER);//It will be added to the ContentPane by default. 
    panel.setLayout(null); 
    ... 

Тогда при вызове, удалить следующий блок:

JFrame PersonalInfo = new JFrame("Personal Info"); 
    PersonalInfo content = new PersonalInfo(); 
    PersonalInfo.setContentPane(content); 

заменить его:

PersonalInfo personalInfo = new PersonalInfo(); 
personalInfo.setSize(700,700); 
personalInfo.setLocation(100,15); 
.... 

Так что это должен быть ваш вызов метода:

public void actionPerformed(ActionEvent e) { 
      PersonalInfo personalInfo = new PersonalInfo(); 
      personalInfo.setSize(700,700); 
      personalInfo.setLocation(100,15); 
      personalInfo.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
      personalInfo.setResizable(false); 
      personalInfo.setVisible(true); 
     } 

И это должно быть вашим Класс:

public class PersonalInfo extends JFrame 
{ 
    public PersonalInfo() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 

     JPanel panel = new JPanel(); 
     add(panel, BorderLayout.CENTER); 
     panel.setLayout(null); 

     JLabel lblPersonalInfo = new JLabel("Personal Information"); 
     lblPersonalInfo.setFont(new Font("Arial", Font.BOLD, 16)); 
     lblPersonalInfo.setBounds(110, 11, 185, 14); 
     panel.add(lblPersonalInfo); 

     JLabel lblFullName = new JLabel("Full Name"); 
     lblFullName.setBounds(10, 36, 58, 14); 
     panel.add(lblFullName); 

     JLabel lblNationality = new JLabel("Nationality"); 
     lblNationality.setBounds(10, 61, 78, 14); 
     panel.add(lblNationality); 

     JLabel lblDateBirth = new JLabel("Date of Birth"); 
     lblDateBirth.setBounds(10, 86, 78, 14); 
     panel.add(lblDateBirth); 

     JLabel lblGender = new JLabel("Gender"); 
     lblGender.setBounds(10, 111, 46, 14); 
     panel.add(lblGender); 

     JLabel lblAddress = new JLabel("Address"); 
     lblAddress.setBounds(10, 164, 58, 14); 
     panel.add(lblAddress); 

     JLabel lblMobile = new JLabel("Mobile"); 
     lblMobile.setBounds(10, 189, 46, 14); 
     panel.add(lblMobile); 

     JLabel lblEmail = new JLabel("E-mail"); 
     lblEmail.setBounds(10, 214, 46, 14); 
     panel.add(lblEmail); 

     JRadioButton rdbtnM_2 = new JRadioButton("M"); 
     rdbtnM_2.setBounds(74, 133, 109, 23); 
     panel.add(rdbtnM_2); 

     JRadioButton rdbtnF = new JRadioButton("F"); 
     rdbtnF.setBounds(74, 107, 109, 23); 
     panel.add(rdbtnF); 
     } 
    } 
Смежные вопросы