Java Swing打开现有表单

Java Swing打开现有表单,java,swing,Java,Swing,我试图调用一个方法来打开一个新的现有框架,但得到的只是一个没有内容的空框架 这是当按钮被修饰时调用函数的代码: JButton btnPersonalInfo = new JButton("Personal Info"); btnPersonalInfo.setBounds(10, 5, 120, 23); btnPersonalInfo.addActionListener(new ActionListener() { public void actionPerformed(Action

我试图调用一个方法来打开一个新的现有框架,但得到的只是一个没有内容的空框架

这是当按钮被修饰时调用函数的代码:

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);
    }
}
基本上,当我按下
btnPersonalInfo
按钮时,我希望从
PersonalInfo
方法查看帧,现在我只得到一个空帧


如果这是一个重复的问题,请向您表示感谢和歉意,但这是我在这里的第一个问题。

删除
frame=new JFrame()从您的
初始化()

简单地说:

    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);
       }
     }

PersonalInfo是一个类而不是一个函数1)请参见2)如需更好的帮助,请尽快发布或。3) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。请改用版面管理器,或与版面填充和边框一起使用。4)“…如果这是重复的,请抱歉…”无需道歉,页面右上角有一个搜索框,当键入问题时,可能重复的内容会显示在消息发布文本框下方。5) 似乎
PersonalInfo
扩展了
JFrame
,这是这个问题的主要部分,因为
initialize()
方法创建并配置了一个从未设置为可见的帧。我不确定这是否是问题的答案,因为没有MCVE,…也没有问题。从上面第(3)点继续。。作为<代码> null 布局(将不会引起问题)的替代方案,请考虑使用适当的布局。使用
GridBagLayout
-这适用于大小不等的组件的列和行(除其他外)。为了简化,它将“标题标签”设置为整个容器的标题边框。