Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止主窗口菜单中的新窗口_Java_Swing - Fatal编程技术网

Java 如何停止主窗口菜单中的新窗口

Java 如何停止主窗口菜单中的新窗口,java,swing,Java,Swing,我有一个主类,在程序启动时加载我的应用程序窗口,如下代码所示: public class SwendaEye{ public static void main(String[]args){ FrameandComp frame = new FrameandComp(); JFrame win; win = frame.mainFrame(); /*===================================================

我有一个主类,在程序启动时加载我的应用程序窗口,如下代码所示:

public class SwendaEye{

    public static void main(String[]args){  
    FrameandComp frame = new FrameandComp();
    JFrame win;

    win = frame.mainFrame();
    /*========================================================================*/
    JMenuBar bar;
    bar = new JMenuBar();
    win.setJMenuBar(bar); 

    JMenu swenda = new JMenu("SWENDAEYE");// adding Swenda menu to the bar.
    bar.add(swenda);

                 JMenuItem open = new JMenuItem("Open");
                 swenda.add(open);
                 JMenuItem exit = new JMenuItem("Exit");
                 swenda.add(exit);

    JMenu tools = new JMenu("Tools");// adding Tools menu to the bar.
    bar.add(tools);
                 JMenuItem convertIP = new JMenuItem("Convert IP Address");
                 tools.add(convertIP);
                 JMenuItem convertDomain = new JMenuItem("Convert Domain Name");
                 tools.add(convertDomain);
                 Domain dom = new Domain();

                 dom.iniTheEvent(convertDomain);
                 convertDomain.addActionListener(dom);

       JMenu view = new JMenu("View"); // adding Swenda menu to the bar.
       bar.add(view);
                 JMenuItem webDetail = new JMenuItem("Website header");
                 view.add(webDetail);
                 JMenuItem report = new JMenuItem("Report");
                 view.add(report);

       win.setVisible(true);
    }
}
例如,当我单击域转换器时,我应该能够触发在
类中设置的新窗口。在我的例子中,窗口确实会打开,但“域转换器”窗口包含一个
菜单
,该菜单是在
Main
类中定义的,当时它应该只有一个按钮和一个文本字段。如您所见,我没有在
类中的任何地方实现或启动
菜单
菜单项

public class Domain implements ActionListener{

    FrameandComp frame = new FrameandComp();
    JFrame domFrame;
    String DomainTitle= "Domain Converter";
    TextField text = new TextField(20);
    JButton bot = new JButton("Convert");
    JMenuItem men;
    public Domain(){        
    }

    public void createFrame(){


        FlowLayout flow = new FlowLayout(); // Create a layout manager
        domFrame =frame.setFrame(400,200,DomainTitle,JFrame.DISPOSE_ON_CLOSE);
        Container content = domFrame.getContentPane(); // Get the content pane
        content.setLayout(flow);
        content.add(text);
        content.add(bot);
        domFrame.add(content);
        domFrame.setVisible(true);

    }


    public JMenuItem iniTheEvent(JMenuItem menuIt){
        return men = menuIt;
    }



     public void actionPerformed(ActionEvent event) {

               if(event.getSource() == men ){
                   this.createFrame();
               }

        }


}
我希望能够单击域转换器
MenuItem
,并且能够打开一个新窗口,而无需从主窗口继承任何菜单功能

有人能告诉我,我在应用程序中犯了什么错误,可能导致我的新窗口继承主窗口的菜单吗

我们将非常感谢您的支持

FrameandComp
类用于初始化所有
JFrames

public class FrameandComp {
    static JFrame awindow = new JFrame();

        public FrameandComp(){}




        public  JFrame setFrame(int width, int height, String title, int exitRule){

            Toolkit thekit = awindow.getToolkit();
            Dimension wndsize =  thekit.getScreenSize();
            awindow.setBounds(wndsize.width/4,wndsize.height/4,width, height);
            awindow.getContentPane().setBackground(Color.DARK_GRAY);
            awindow.setTitle(title);
            awindow.setDefaultCloseOperation(exitRule);
            return awindow;

        }


        public JFrame mainFrame(){

            Toolkit thekit = awindow.getToolkit();
            Dimension wndsize =  thekit.getScreenSize();
            awindow.setBounds(wndsize.width/4,wndsize.height/4,
            ((2 *wndsize.width)/2), ((2 *wndsize.height)/2));
            awindow.getContentPane().setBackground(Color.DARK_GRAY);
            awindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            awindow.setTitle("SWENDAEYE");
            return awindow;

        }


}

如果您只需要一个简单的输入对话框,请在
类中查看(或查看一些示例)

,请删除此行-

FrameandComp frame = new FrameandComp();
createFrame()
方法中,将domFrame对象初始化为新的JFrame-

domFrame = new JFrame(DomainTitle);
domFrame.setSize(400,200);
而不是-

domFrame =frame.setFrame(400,200,DomainTitle,JFrame.DISPOSE_ON_CLOSE);
您将向frame对象添加元素,而不是创建您提到的新JFrame(窗口)

我建议,如果您只是想从用户那里获取输入,请尝试

JOptionPane.showInputDialog(...)

希望这对您有所帮助。

在您的
FrameandComp
类中,您可以创建
awindow
的单个实例,并将其用于
大型机
设置框架
方法


相反,尝试在这些方法中创建一个新框架并返回该框架,这样,每次调用其中一个方法时,都会得到一个新框架。

什么是
FrameandComp
?是我用来初始化所有Jframes的类。请尽快发布一个简短的可运行,可编译否我希望有一个自定义窗口,以便在有任何错误输入时显示消息。@salimalmughairi,这与want JOptionPane有何不同?