外部类 jframe 在调用内部类 jframe 时不会隐藏



当我调用内部 jframe 时,它被调用,但外部 jframe 没有隐藏。 相反,它被重叠了。 那么解决方案是什么。有什么办法可以摆脱这种情况。正如我在调用内部类框架时所尝试的那样,外部类框架也被调用,并且它不是隐藏的。

package com.exp.example;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class A extends JFrame implements ActionListener {
    JFrame rframe = new JFrame();
    JLabel CFirstName;
    JTextField Cfname;
    JButton jbsubmit;
    Container cp;
    public A() {
        rframe.setSize(500, 200);
        rframe.setLocationRelativeTo(null);
        cp = getContentPane();
        cp.setLayout(null);
        setSize(550, 300);
        rframe.setTitle("Outer Frame");
        cp.setBackground(new Color(140, 180, 180));
        CFirstName = new JLabel("First Name");
        Cfname = new JTextField(10);
        jbsubmit = new JButton("PREVIEW");
        CFirstName.setBounds(10, 20, 100, 35);
        Cfname.setBounds(150, 20, 150, 25);
        jbsubmit.setBounds(190, 110, 92, 25);
        cp.add(CFirstName);
        cp.add(Cfname);
        cp.add(jbsubmit);
        jbsubmit.addActionListener(this);
        rframe.add(cp);
        rframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rframe.setVisible(true);
    }
    public void actionPerformed(ActionEvent ae) {
        String action = ae.getActionCommand();

        if (action == "PREVIEW") {
            /* Write the code here
             * When we click on preview button the frame of outer class(class A) gets
             * deactivated(closed) and inner frame, frame of inner class(class B) gets visible.
             * it should not be overlapped.  
             */
            /* My Code */
            new B();
            rframe.setVisible(false);
        }
    }
    public class B {
        JFrame frm = new JFrame();
        Container cp;
        public B() {
            frm.setSize(500, 200);
            frm.setLocationRelativeTo(null);
            cp = getContentPane();
            cp.setLayout(null);
            setSize(550, 300);
            frm.setTitle("Inner Frame");
            cp.setBackground(new Color(140, 180, 180));
            JLabel cpn = new JLabel("hello");
            cpn.setBounds(10, 20, 100, 35);
            cp.add(cpn);
            frm.add(cp);
            frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frm.setVisible(true);
        }
    }
    public static void main(String[] args) {
        new A();
    }
}

首先,不错的SSCCE,很多人不发布。

其次,我认为您的标签重叠,请尝试:

if(action.equals("PREVIEW"))
    {
    CFirstName.setText("");
    new B();
    rframe.setVisible(false);
    }

祝你好运!

1,A扩展JFrame。但是内部类B并没有扩展JFrame.

2,在 AB 的构造函数中,您调用 getContentPane() 来获取 ContentPane 对象。由于B不扩展JFrame并且它是A的内部类。所以实际上AB使用相同的ContentPane对象来显示某些内容。

3,在A的构造函数中,您已经向其添加了一些组件。然后在 B 的构造函数中,向同一个ContentPane对象添加一个JLabel。因此,将显示所有这些组件。这不是因为A中的框架没有隐藏。这是因为再次显示相同的ContentPane对象。

解决方案:您可以使B扩展JFrame

A 的构造函数中,第 26 行:

rframe.setSize(500, 200);
rframe.setLocationRelativeTo(null);
cp = getContentPane();
cp.setLayout(null);
setSize(550, 300);

B的构造函数中,第 74 行:

frm.setSize(500, 200);
frm.setLocationRelativeTo(null);
cp = getContentPane();
cp.setLayout(null);
setSize(550, 300);

附言在代码中,您将始终创建一个新的JFrame对象并使用它。AB没有必要延长JFrame.也许最好进行以下更改。

1、在类A中,不要创建新的JFrame对象,只用A,因为它也是一个JFrame

2,在类B中,使用cp = frm.getContentPane();从您实际使用JFrame中获取ContentPane

你的容器有错误。在 A 类中,您有容器 cp,在 B 类中也是如此。但是您的程序始终引用类 A 的容器 cp。所以在你为类 B(新 B())创建对象之前,你必须删除容器 cp 的所有组件。

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

    if (action == "PREVIEW") {
        /* Write the code here
         * When we click on preview button the frame of outer class(class A) gets
         * deactivated(closed) and inner frame, frame of inner class(class B) gets visible.
         * it should not be overlapped.  
         */
        /* My Code */
        cp.removeAll();
        rframe.setVisible(false);
        new B();

    }
}

相关内容

  • 没有找到相关文章

最新更新