0

当我调用内部类JFrame时,它被调用并显示,但外部类JFrame没有隐藏。我在这里提供我的代码。具体来说,我正在尝试填写表格,然后我想预览我所写的表格。

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

        }

    }
4

2 回答 2

1

您正在创建多个不同的实例,JFrame它们彼此之间没有任何联系......

public class LRegister extends JFrame implements ActionListener {

    final public JFrame rframe = new JFrame();

LRegister是一个JFrame,在它上面(据我所知)你构建你的 UI。但是然后您尝试更改的可见性状态rframe

您可以考虑使用 aCardLayout而不是使用不同的框架,但这意味着您需要直接开始使用布局管理器

通读一下如何比较 Java 中的字符串也是一个好主意?多个 JFrame 的使用:好的还是坏的做法?

于 2013-10-23T06:31:08.300 回答
0
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);
        }
    }
}

在 touractionPerformed()中,有三个不同的if语句,每个语句只触发一帧动作。这是你的意图吗?如果您希望外框不可见,您不应该添加outerFrame.setVisible(false);吗?

添加所有你action == "PREVIEW"应该是action.equals("PREVIEW")

于 2013-10-23T06:29:08.493 回答