2013-03-30 23 views
0

我的程序在屏幕上显示一些窗口(jframe和jpanel)和主框架。当用户选择删除主框架中的一个窗口时,它应该关闭所选窗口。关闭1 jframe与多个jframes活动不起作用

我有一个数组中的窗口。当用户选择要关闭的窗口时,它将擦除该jframe,它是数组中的jpanel,它应该关闭该jframe,但它不会。没有错误显示出来,当我再次运行程序时,所有内容都被认为是:删除的框架未显示。我的结论是我没有正确地关闭jframe,并且程序的其余部分没有问题。

我曾尝试:

窗口[Frame_to_close] .setDefaultCloseOperation(窗口[Frame_to_close] .DISPOSE_ON_CLOSE);

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

我是否在关闭窗口时做错了什么?有没有其他关闭窗口的方式(Jframe和Jpanel)?

+0

这将是必须更好,如果你帮助你显示您的代码.. –

+1

请参阅[使用多个JFrames,好/坏实践?](http://stackoverflow.com/a/9554657/418556) –

回答

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