JAVA GUI Swing 中标题可以显示而组件显示不出来,已经将setVisible放到最后了

运行后,标题可以显示而组件显示不出来,已经将setVisible放到最后了,
定义了setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); 也无法关闭界面,麻烦大家看一看叭!感谢

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


**public class PtUserOperate **{

    public void ptUserOperate() {
        JFrame jf = new JFrame("普通用户操作界面");
        jf.setLayout(new FlowLayout(FlowLayout.CENTER));
        jf.setBounds(460, 300, 400, 300);
        Dimension preferredSize = new Dimension(100,30);
        JButton b1 = new JButton("查询书籍");
        b1.setPreferredSize(preferredSize);
      
        JButton button2 = new JButton("借阅书籍");
        button2.setPreferredSize(preferredSize);
        JButton button3 = new JButton("归还书籍");
        button3.setPreferredSize(preferredSize);
        JButton button4 = new JButton("修改密码");
        button4.setPreferredSize(preferredSize);

        jf.add(b1);
        jf.add(button2);
        jf.add(button3);
        jf.add(button4);

        jf.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        jf.setResizable(false);
        jf.setVisible(true);
    }
} 

    }

public class PtLogin extends JDialog {
    JTextField usernameText;
    JPasswordField pwdText;
    JLabel label1;
    JLabel label2;
    JButton button;

    PtLogin() {
        createGUIElements();
    }
    void createGUIElements() {
        // 设置登录对话框,并设置位置及大小、模态等
        JFrame jf = new JFrame("普通用户登录系统");
        jf.setBounds(460, 300, 400, 150);
        jf.setLayout(new FlowLayout(FlowLayout.CENTER));
        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        label1 = new JLabel("用户名:");
        usernameText = new JTextField("",30);
        label2 = new JLabel("密   码:");
        pwdText = new JPasswordField("",30);
        button = new JButton("登录");
        button.setSize(40, 20);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                login();
            } // 方法结束
        });
        jf.add(label1);
        jf.add(usernameText);
        jf.add(label2);
        jf.add(pwdText);
        jf.add(button);
        jf.setResizable(false);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(WindowConstants. HIDE_ON_CLOSE);
    }

   ** void showptOperateWindows()**{//展示普通用户操作界面
        PtUserOperate puo= new PtUserOperate();
         puo.ptUserOperate();**
    }

    public void login()   // 处理登录按钮事件
    {
        try {
//         boolean a = true;
            File file = new File("D:\\IdeaProjects\\Java课设\\src", "用户信息.txt");
            String operator = usernameText.getText();
            String password = new String(pwdText.getPassword());
            FileInputStream intput = new FileInputStream(file);
            BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
            String tempString;
            List<String> list = new ArrayList<>();
            while ((tempString = reader.readLine()) != null) {
                list.add(tempString);
            }
            //判断输入的用户名是否存在
            boolean flag = false;
            String[] userinf = new String[5];
            for (String user : list) {
                userinf = user.split(",");
                if (operator.equals(userinf[0])) { //判断用户名是否存在
                    flag = true;
                    break;
                }
            }
            //如果存在,判断密码是否正确
            if (flag == true) {

                if (password.equals(userinf[1])) {
                    JOptionPane.showMessageDialog(null, "登陆成功", "登陆成功", JOptionPane.NO_OPTION);
                   **showptOperateWindows();// 显示主窗体,普通用户操作界面**
                    //写日志
                    Date nowDate = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String returnTime = sdf.format(nowDate);
                    File file2 = new File("D:\\IdeaProjects\\Java课设\\src", "日志.txt");
                    FileWriter fw1 = new FileWriter(file2, true);
                    fw1.write(returnTime + "  " + operator + "登录了");
                    fw1.write(System.getProperty("line.separator"));//在段落后添加一个换行符
                    fw1.close();
                    //登录
                    try {
                        User user = new User();
                        user.operation(userinf, operator);
                    } catch (Exception e) {
                        System.out.println("出错了吧!");
                        User user = new User();
                        user.operation(userinf, operator);
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "密码错误", "密码错误", JOptionPane.WARNING_MESSAGE);
                    pwdText.setText("");
                }

            } else {
                JOptionPane.showMessageDialog(null, "用户名不存在", "用户名不存在", JOptionPane.WARNING_MESSAGE);
                usernameText.setText("");
                pwdText.setText("");
            }
            intput.close();
            reader.close();
           
        } catch (Exception e) {
            System.out.println("出错了!!!");
            PtLogin ptlogin = new PtLogin();
            ptlogin.createGUIElements();
            return;
        }
    }





后面调用showptOperateWindows()函数的代码太长就不展示了

img

这个是执行的结果

窗口的默认布局是BorderLayout的布局方式,所有控件层叠在一起了,要设置布局。