Calling a JFrame of inner class and hiding the JFrame of outer class

限于喜欢 提交于 2019-12-11 21:27:13

问题


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

        }

    }

回答1:


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?




回答2:


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")



来源:https://stackoverflow.com/questions/19534152/calling-a-jframe-of-inner-class-and-hiding-the-jframe-of-outer-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!