-3
我希望能夠檢測JDesktopPane
中JInternalFrame
的所有實例何時關閉。我一直在瀏覽桌面窗格觸發的事件,但沒有看到適用的事件。我已經嘗試添加JInternalFrameListener
添加到桌面窗格中的每一個,並偵聽一個封閉的事件,但似乎並沒有工作。如何檢測桌面窗格中的所有內部框架何時關閉?
我希望能夠檢測JDesktopPane
中JInternalFrame
的所有實例何時關閉。我一直在瀏覽桌面窗格觸發的事件,但沒有看到適用的事件。我已經嘗試添加JInternalFrameListener
添加到桌面窗格中的每一個,並偵聽一個封閉的事件,但似乎並沒有工作。如何檢測桌面窗格中的所有內部框架何時關閉?
這裏的工作示例:
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變量)的。
顯示你正在執行它的代碼,然後可能有人能夠更好地幫助你。 – Frakcool
請參見['JInternalFrame.addInternalFrameListener(InternalFrameListener)'](http://docs.oracle.com/javase/8/docs/api/javax/swing/JInternalFrame.html#addInternalFrameListener-javax.swing.event.InternalFrameListener-)關閉一個窗口。保留內部框架列表,並在關閉時從列表中刪除它們。 *「但這似乎不起作用。」*爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –