Java 主屏幕上的JFrame复制

Java 主屏幕上的JFrame复制,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,当我点击搜索按钮时,我的代码正在复制主屏幕的创建。搜索事件应该只打开一个带有文本框的新框架来键入查询。创建另一个帧会导致这种重复,或者这是某种错误?我尝试使用大型机上载searchPane的日期(代码中的p1),但当我这样做时,这解决了我的窗口问题,但搜索窗口上的defaultCloseOperation()导致整个程序关闭-我如何解决这种情况 提前谢谢 搜索屏幕 import java.awt.Color; import java.awt.GridLayout; import javax.s

当我点击搜索按钮时,我的代码正在复制主屏幕的创建。搜索事件应该只打开一个带有文本框的新框架来键入查询。创建另一个帧会导致这种重复,或者这是某种错误?我尝试使用大型机上载searchPane的日期(代码中的p1),但当我这样做时,这解决了我的窗口问题,但搜索窗口上的defaultCloseOperation()导致整个程序关闭-我如何解决这种情况

提前谢谢

搜索屏幕

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class SearchScreen extends MainScreen{

    JButton btsearch;
    JLabel lbsearch;
    protected JTextField txtsearch;
    JPanel p1;
    protected JFrame searchFrame = new JFrame();

    public SearchScreen(){

    //Button Creation
        btsearch= new JButton("Search");

    //Label Creation
        lbsearch= new JLabel("Type Keywords in english to be searched below:");

    //TextBox   
        txtsearch= new JTextField();

    //Pane Creation 
        p1=new JPanel();
            p1.setBackground(Color.gray);

    //Pane Components
        p1.add(lbsearch);
            p1.add(txtsearch);
                p1.add(btsearch);

    //JFrame Layout Setup   
        p1.setLayout(new GridLayout(3,3));

            btsearch.setEnabled(true);

    //Adding JPaneel    
        searchFrame.add(p1);

    //JFrame Setup
        searchFrame.setTitle("SHST");
            searchFrame.setSize(400, 400);
                searchFrame.setVisible(true);
                    searchFrame.setDefaultCloseOperation(1);

    }

}
主屏幕

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class MainScreen implements ActionListener {


    JMenuBar bar;
    JMenu file, register;
    JMenuItem close, search;
    JPanel entrance = new JPanel();
    JFrame mainFrame = new JFrame();

    public MainScreen()
    {

        bar= new JMenuBar();
        file= new JMenu("File");
            register= new JMenu("Search");

        close= new JMenuItem("Close");
            close.addActionListener(this);

        search= new JMenuItem("Request Query");
            search.addActionListener(this);

        //mainFrame Setup
        bar.add(file);
            bar.add(register);
                file.add(close);
                    register.add(search);

            mainFrame.setExtendedState(mainFrame.getExtendedState() | mainFrame.MAXIMIZED_BOTH); 
                mainFrame.setTitle("SHST");
                    mainFrame.setJMenuBar(bar);
                        mainFrame.setDefaultCloseOperation(0);
                            mainFrame.setVisible(true);

                             WindowListener J=new WindowAdapter(){
                                    public void windowClosing(WindowEvent e){
                                    System.exit(0);
                                    }
                                }; 

                                mainFrame.addWindowListener(J);

}

    public void actionPerformed(ActionEvent e){
        if(e.getSource()==close){
            System.exit(0);
    }

            if(e.getSource()==search){
                SearchScreen s= new SearchScreen();

            }

public static void main (String[] args){

        MainScreen m= new MainScreen();

    }

        }
你的问题在这里

 if(e.getSource()==search){
                    SearchScreen s= new SearchScreen();

                }

使用继承实现是危险的,SearchScreen是一个
MainScreen
,然后总是调用这个类的构造函数。

ow-这很快;它现在起作用了,但我想你的意思是“使用赫兹”不是吗?因为我移除了来自搜索屏幕的遗传,现在像个魔术师一样工作;D@VictorOliveira我不是以英语为母语的人,可能是我创造了一些不存在的单词。。我的意思是使用具体继承(与具体类一起使用)是危险的,这种情况很少见necesesary@nachkokk抱歉耽搁了,第一次投票时,我应该再等5分钟才能接受,我不得不离开电脑——但真的很感谢dude Hehehean和Heritance不存在——哈哈哈忘了说这个——它的等级制度;我明白了,因为我的自然语言听起来像是遗传。哈哈哈