如何停止新窗口继承主窗口的菜单

时间:2013-03-14 18:37:23

标签: java swing

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

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

例如,当我点击域转换器时,我应该能够触发在Domain类中设置的新窗口。在我的情况下,窗口打开,但“域转换器”窗口包含MenuMain类中定义的Menu时,它应该只有一个按钮和一个文本字段。如您所见,我尚未在MenuItem课程中的任何位置实施或发起Domainpublic 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; } }

{{1}}

3 个答案:

答案 0 :(得分:0)

如果您只想要一个简单的输入对话框,请查看JOptionPane(或某些示例为here

答案 1 :(得分:0)

Domain课程中,删除此行 -

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

您正在向框架对象添加元素,而不是创建您提到的新JFrame(窗口)。

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

JOptionPane.showInputDialog(...)

希望能帮到你..

答案 2 :(得分:0)

FrameandComp课程中,您创建了awindow的单个实例,并将其用于mainframesetFrame方法。

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