Calling a JFrame of inner class and hiding the JFr

2019-09-10 07:10发布

When i am calling the inner class JFrame , it is called and it is displaying, but the outer class JFrame is not hiding. here i am providing my code. To be very specific, I am trying to fill a form and then i want to preview the form what i have written.

package com.vote.rmc;

public class LRegister extends JFrame implements ActionListener {

    final public JFrame rframe = new JFrame();
    JLabel

    public LRegister() {

        rframe.setSize(800, 600);
        rframe.setLocationRelativeTo(null);
        cp = getContentPane();
        cp.setLayout(null);
        setSize(550, 300);
        rframe.setTitle("User Registration Form");
        cp.setBackground(new Color(140, 180, 180));

        JTextArea plainTextArea = new JTextArea();
        JScrollPane scrollPanePlain = new JScrollPane(plainTextArea);
        cp.add(scrollPanePlain);
        scrollPanePlain.setBounds(150, 250, 150, 100);
        scrollPanePlain.setVisible(true);

        CFirstName = new JLabel("First Name");
        CLastName = new JLabel("Last Name");
        DOB = new JLabel("Date Of Birth");
        FatherName = new JLabel("Father's Name");
        PhoneNumber = new JLabel("Phone Number");
        address = new JLabel("Address");
        departmentName = new JLabel("Department Name");
        Year = new JLabel("Year");
        EmailID = new JLabel("Email ID");
        jpic = new JLabel("Upload your Picture");

        l = new JLabel("Candidates Information");
        jlmsg = new JLabel("", JLabel.CENTER);

        Cfname = new JTextField(10);
        Clname = new JTextField(10);
        birth = new JTextField(10);
        Fname = new JTextField(10);
        PhNum = new JTextField(10);
        addrss = new JTextField(10);
        deptName = new JTextField(10);
        Yr = new JTextField(10);
        mailID = new JTextField(10);

        jbsubmit = new JButton("PREVIEW");

        jbrowse = new JButton("BROWSE PICTURE");
        jbexit = new JButton("CLOSE");

        l.setBounds(270, 10, 250, 35);
        CFirstName.setBounds(10, 50, 100, 35);
        Cfname.setBounds(150, 55, 150, 25);

        CLastName.setBounds(400, 50, 500, 35);
        Clname.setBounds(550, 50, 150, 25);

        DOB.setBounds(10, 100, 100, 35);
        birth.setBounds(150, 105, 150, 25);

        FatherName.setBounds(10, 150, 100, 35);
        Fname.setBounds(150, 155, 150, 25);

        PhoneNumber.setBounds(400, 100, 500, 35);
        PhNum.setBounds(550, 100, 150, 25);

        departmentName.setBounds(400, 150, 500, 35);
        deptName.setBounds(550, 150, 150, 25);

        EmailID.setBounds(10, 190, 150, 50);
        mailID.setBounds(150, 200, 150, 25);

        address.setBounds(10, 250, 100, 35);
        addrss.setBounds(150, 250, 150, 100);

        Year.setBounds(400, 200, 500, 35);
        Yr.setBounds(550, 200, 150, 25);

        jbsubmit.setBounds(150, 380, 92, 25);
        //jbnew.setBounds(300,380,92,25);
        jbexit.setBounds(450, 380, 92, 25);

        jpic.setBounds(400, 250, 500, 35);
        jbrowse.setBounds(550, 253, 150, 25);

        jbsubmit.addActionListener(this);
        //jbnew.addActionListener(this);
        jbrowse.addActionListener(this);
        jbexit.addActionListener(this);

        cp.add(jpic);
        cp.add(Cfname);
        cp.add(CFirstName);
        cp.add(CLastName);
        cp.add(DOB);
        cp.add(EmailID);
        cp.add(FatherName);
        cp.add(Clname);
        cp.add(Fname);
        cp.add(departmentName);
        cp.add(deptName);
        cp.add(Year);
        cp.add(birth);
        cp.add(Fname);
        cp.add(PhNum);
        cp.add(addrss);
        cp.add(Yr);
        cp.add(mailID);

        cp.add(DOB);
        cp.add(PhoneNumber);
        cp.add(address);
        cp.add(jbsubmit);
        //cp.add(jbnew); 
        cp.add(jbexit);
        cp.add(jbrowse);
        cp.add(l);

        rframe.add(cp);
        rframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rframe.setVisible(true);

    }

    public void actionPerformed(ActionEvent ae) {
        String action = ae.getActionCommand();

        if (action == "PREVIEW") {
            new B();

            rframe.setVisible(false);

        }

        if (action == "CLOSE") {
            rframe.setVisible(false);
        }

        if (action == "BROWSE PICTURE") {
            if (ae.getSource() == jbrowse) {
                analizepath();
                rframe.setVisible(true);
            }
        }

    }

    private File getFile() {
        JFileChooser filechooser = new JFileChooser();
        filechooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        @SuppressWarnings("unused")
        int result = filechooser.showOpenDialog(this);
        File filename = filechooser.getSelectedFile();
        if ((filename == null) || (filename.getName().equals(""))) {
            JOptionPane.showMessageDialog(this, "invalid filename", "invalidfilename", JOptionPane.ERROR_MESSAGE);
        }
        return filename;
    }

    public void analizepath() {
        File name = getFile();

        path = name.getAbsolutePath();
        picture = new ImageIcon(path);
        pic = new File(path);
        try {
            inputStream = new FileInputStream(pic);
        } catch (Exception d) {
            System.out.println(d);
        }
        System.out.print(path);
    }

    class B {

        JFrame frame = new JFrame();

        public B() {

            B.this.frame.setSize(800, 600);
            B.this.frame.setLocationRelativeTo(null);
            cp = getContentPane();
            cp.setLayout(null);
            setSize(550, 300);
            B.this.frame.setTitle("Preview Form");
            cp.setBackground(new Color(140, 180, 180));

            JTextField c = LRegister.this.Cfname;
            String cfn = c.getText();
            System.out.println(cfn);

            CFirstName = new JLabel(cfn);

            CLastName = new JLabel("Last Name");

            DOB = new JLabel("Date Of Birth");

            FatherName = new JLabel("Father's Name");

            PhoneNumber = new JLabel("Phone Number");

            address = new JLabel("Address");

            departmentName = new JLabel("Department Name");

            Year = new JLabel("Year");

            EmailID = new JLabel("Email ID");

            jpic = new JLabel("Your Picture");

            l = new JLabel("Preview Your Form Before Submitting");

            jlmsg = new JLabel("", JLabel.CENTER);

            l.setBounds(270, 10, 250, 35);
            CFirstName.setBounds(10, 50, 100, 35);
            CLastName.setBounds(400, 50, 500, 35);
            DOB.setBounds(10, 100, 100, 35);
            FatherName.setBounds(10, 150, 100, 35);
            PhoneNumber.setBounds(400, 100, 500, 35);
            departmentName.setBounds(400, 150, 500, 35);
            EmailID.setBounds(10, 190, 150, 50);
            address.setBounds(10, 250, 100, 35);
            Year.setBounds(400, 200, 500, 35);
            jpic.setBounds(400, 250, 500, 35);

            cp.add(jpic);
            cp.add(CFirstName);
            cp.add(CLastName);
            cp.add(DOB);
            cp.add(EmailID);
            cp.add(FatherName);
            cp.add(departmentName);
            cp.add(Year);
            cp.add(DOB);
            cp.add(PhoneNumber);
            cp.add(address);
            cp.add(l);

            frame.repaint();
            B.this.frame.add(cp);
            B.this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            B.this.frame.setVisible(true);

        }

    }

2条回答
ら.Afraid
2楼-- · 2019-09-10 07:40

You're creating multiple different instance of JFrame which have no connection to each other...

public class LRegister extends JFrame implements ActionListener {

    final public JFrame rframe = new JFrame();

LRegister is a JFrame, onto which (from near as I can tell) you build you UI. But then you try and change the visibility state of rframe?

You may consider using a CardLayout instead of resorting to using different frames, but that would then mean you would need start using Layout Managers directly

It would also be a good idea to have a read through How do I compare strings in Java? and The Use of Multiple JFrames: Good or Bad Practice?

查看更多
forever°为你锁心
3楼-- · 2019-09-10 07:55
public void actionPerformed(ActionEvent ae) {
    String action = ae.getActionCommand();

    if (action == "PREVIEW") {
        new B();

        rframe.setVisible(false);

    }

    if (action == "CLOSE") {
        rframe.setVisible(false);
    }

    if (action == "BROWSE PICTURE") {
        if (ae.getSource() == jbrowse) {
            analizepath();
            rframe.setVisible(true);
        }
    }
}

In tour actionPerformed(), there's three different if statements that only triggers one frame action each. Is this your intention? If you want the outer frame to be not visible, should't you add outerFrame.setVisible(false);?

Add all of your action == "PREVIEW" should be action.equals("PREVIEW")

查看更多
登录 后发表回答