java - 关闭 1 个 jframe,其中多个 jframe 处于 Activity 状态,无法正常工作

标签 java swing jframe dispose

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

我将这些窗口放在一个数组中。当用户选择要关闭的窗口时,它将从数组中删除该 jframe 和 jpanel,并且它应该关闭该 jframe,但事实并非如此。没有显示任何错误,当我再次运行该程序时,一切都按预期进行:未显示已删除的帧。我的结论是我无法正确关闭 jframe,并且程序的其余部分都很好。

我已经尝试过:

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

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

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

最佳答案

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

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

关于java - 关闭 1 个 jframe,其中多个 jframe 处于 Activity 状态,无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723230/

相关文章:

java - 如何获得嵌入式图形组件的独特图形上下文?

java - GUI - 更改 JFrame 的颜色

java - 如何使用 Java Swing 绘制图表

java - 如何使用 Rest API 在 MongoDB 中使用 $in

java - 用 drawString 绘制心形符号

java 。 GUI WindowBuilder 通过单击按钮将文本从 JTextField 打印到面板

java - 如何在空布局中强制调整 JComponent 的大小?

java - 如何在命令提示符下运行java应用程序(eclipse)?

java - 从旋转器中定位用户选择并在下一个 Activity 中使用它 - Android

java - IntelliJ IDEA 中的自动错误检测