2013-03-30 26 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; 
}