当前位置: 首页 > 知识库问答 >
问题:

关闭1个jframe,多个jframe处于活动状态,但不工作

壤驷兴朝
2023-03-14

我的程序在屏幕上显示一些窗口(jframe和jpanel)和一个主框架。当用户选择删除主框架中其中一个窗口的选项时,应关闭所选窗口。

我把那些窗户排成一排。当用户选择要关闭的窗口时,它将从数组中删除该jframe和它的jpanel,它应该关闭该jframe,但不会。没有显示任何错误,当我再次运行该程序时,一切都与预期一样:删除的帧不会显示。我的结论是,关闭jframe时,我没有正常工作,程序的其余部分也没有问题。

我试过:

windows[Frame_to_close]. setDefaultCloseAction(windows[Frame_to_close].DISPOSE_ON_CLOSE);

windows[Frame_to_close].setVisible(false); 
windows[Frame_to_close].dispose();

关闭窗口时我做错了什么吗?有没有其他关闭窗口的方法(Jframe和Jpanel)?

共有1个答案

归明诚
2023-03-14

用户将如何选择要关闭的窗口?使用下面的代码,您可以通过按按钮关闭窗口或直接关闭窗口(在这种情况下,框架不会从列表中删除):

private void createManyFrames() {
    final JFrame mainFrame = new JFrame("Stack Overflow: closing frames");
    mainFrame.setBounds(100, 100, 240, 600);
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    mainFrame.getContentPane().setLayout(new FlowLayout());
    final List<JFrame> frames = initializeFrames(Arrays.asList("one", "two", "three"));
    for (final JFrame frame : frames) {
        final JButton button = new JButton(frame.getTitle());
        mainFrame.getContentPane().add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                frame.dispose();
                frames.remove(frame);
            }
        });
        frame.setVisible(true);
    }
    mainFrame.setVisible(true);
}

private List<JFrame> initializeFrames(final List<String> frameNames) {
    final List<JFrame> frames = new ArrayList<JFrame>();
    for (final String frameName : frameNames) {
        final JFrame frame = new JFrame(frameName);
        frame.setBounds(480, 120 * (1 + frames.size()), 200, 100);
        final JPanel panel = new JPanel();
        panel.add(new JLabel("Label in panel in frame " + frameName + "."));
        frame.getContentPane().add(panel);
        frames.add(frame);
    }
    return frames;
}
 类似资料:
  • 问题内容: 我想同时显示两个(或更多) JFrame 。 当我关闭其中一个(使用默认的关闭按钮)时,其他框架仍应可见。 我怎样才能做到这一点? 问题答案: 如果您 不 希望应用程序在a 关闭时终止,请使用 代替 从文档中: (在WindowConstants中定义):不执行任何操作;要求程序处理注册的WindowListener对象的windowClosing方法中的操作。 (在WindowCon

  • 问题内容: 我想知道是否有一种方法,通过单击“ X”,让程序在关闭JFrame之前执行一些代码。该方法仅使用整数。 问题答案: 您可能对使用感兴趣。本教程。

  • 我有JFrame和一个按钮,可以在点击事件时打开一个JPopupMenu。这个JPOppMenu有一个带有按钮的JPanel。这个按钮应该用来处理JPOppMenu。只要JFrame没有最大化,它就会这样做。但是,当JFrame最大化时,它会关闭JFrame本身。 任何有助于解决这一问题的帮助或建议都将不胜感激。 (我正在使用netbeans来开发这个。) 下面是MyJpanel的代码。

  • 正如标题所说,我实际上想知道一个JFrame表单如何知道另一个JFrame表单的windowListening状态。 可能会让人困惑,但我可以澄清一下。 我有一个主JFrame表单,它调用另外两个JFrame表单。因此,每当一个JFrame窗体关闭时,它就会将主JFrame窗体回调到setVisible(true)并将其自身设置为dispose()。 但我想知道彼此的状态。我想要的是: 如果我的第

  • 我有一个带有登录名(JPanel)的JFrame,可以从菜单栏中选择。菜单栏还根据用户角色显示选项。当用户第一次登录创建的JFrame实例时,当我在菜单栏上选择login并在new JFrame上实例化时,我的问题就出现了,因为我显然打开了两个JFrame,我找不到从JPanel隐藏或关闭之前JFrame的方法。在实例化新JFrame或任何其他可能的解决方案之前,有没有办法隐藏/处理所有打开的窗口

  • 我正在做一个实验2D物理的个人项目。现在,我正在尝试设置JFrame,以便它每秒更新60次。但是,当我调用方法开始更新JFrame时,我不能关闭JFrame。但是如果我省略了调用方法的部分,我可以关闭JFrame。这是主要代码: 这是Frame的代码: 如果我不在start()中调用updater(),我可以关闭JFrame。我知道我离开running=true,但它仍然应该关闭,因为这在我的旧计