0

我的程序在屏幕上显示一些窗口(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)吗?

4

1 回答 1

1

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

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;
}
于 2013-03-30T21:40:37.587 回答