2015-09-22 6 views
-3

Я хочу, чтобы иметь возможность обнаруживать, когда все экземпляры JInternalFrame в JDesktopPane закрыты. Я просматривал события, запущенные на панели рабочего стола, и я не вижу того, что применимо. Я попытался добавить JInternalFrameListener к каждому добавленному на панель рабочего стола и прослушиванию закрытого события, но это, похоже, не работает.Как определить, когда все внутренние кадры закрыты в области рабочего стола?

+1

Покажите код, в котором вы его реализуете, возможно, кто-то может помочь вам. – Frakcool

+1

См. ['JInternalFrame.addInternalFrameListener (InternalFrameListener)'] (http://docs.oracle.com/javase/8/docs/api/javax/swing/JInternalFrame.html#addInternalFrameListener-javax.swing.event.InternalFrameListener-) для закрытия одного окна. Сохраните список внутренних фреймов и удалите их из списка при закрытии. * «но это, похоже, не работает». * Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

0

Вот рабочий пример:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class InternalFrameDemo extends JFrame { 
    JDesktopPane desktop; 
    InternalFrameAdapter adapter; 
    int frameCount = 0; 

    public InternalFrameDemo() { 
     super("InternalFrameDemo"); 

     adapter = new InternalFrameAdapter() { 
      public void internalFrameClosed(InternalFrameEvent e) { 
       frameCount--; 
       if (frameCount == 0) { 
        JOptionPane.showMessageDialog(InternalFrameDemo.this, "All internal frames closed."); 
       } 
      } 
     }; 

     setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH); 

     desktop = new JDesktopPane(); 
     createFrame(); 
     createFrame(); 
     createFrame(); 
     setContentPane(desktop); 
    } 

    protected void createFrame() { 
     JInternalFrame frame = new JInternalFrame("title", true, true); 
     frame.setSize(300,300); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 
     frameCount++; 
     frame.addInternalFrameListener(adapter); 
     desktop.add(frame); 
    } 

    private static void createAndShowGUI() { 
     InternalFrameDemo frame = new InternalFrameDemo(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } 
     catch (UnsupportedLookAndFeelException e) { 
      // handle exception 
     } 
     catch (ClassNotFoundException e) { 
      // handle exception 
     } 
     catch (InstantiationException e) { 
      // handle exception 
     } 
     catch (IllegalAccessException e) { 
      // handle exception 
     } 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

Вы в основном добавить слушателя на каждой внутренней раме и следить за открытых и закрытых кадров (с переменной INT).

Смежные вопросы