我使用< code>netbeans在< code>java中创建了< code>MDI(多文档接口),其中我有两个jbuttons和一个jdesktoppane,因此当单击两个按钮时,两个jinternalframe都在同一个jdesktoppane中打开,所以我想知道当< code>jdesktoppane中的< code >打开新的jinternalframe时,如何< code >关闭以前的jinternalframe?
第一个jButton代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
tst t = new tst();
JInternalFrame internalFrame1 = new JInternalFrame("Test Window1");
internalFrame1.add(t.getContentPane());
internalFrame1.pack();
internalFrame1.setVisible(true);
q.add(internalFrame1);
internalFrame1.setClosable(true);
BasicInternalFrameUI ui = (BasicInternalFrameUI)internalFrame1.getUI();
Container north = (Container)ui.getNorthPane();
north.remove(0);
north.validate();
north.repaint();
for(MouseListener listener : ((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame1.getUI()).getNorthPane().getMouseListeners()){
((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame1.getUI()).getNorthPane().removeMouseListener(listener);
}
internalFrame1.setSelected(true);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}
第二个按钮代码:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
zxy z = new zxy();
JInternalFrame internalFrame = new JInternalFrame("Test Window2");
internalFrame.add(z.getContentPane());
internalFrame.pack();
internalFrame.setSize(570,420);
internalFrame.setVisible(true);
q.add(internalFrame);
internalFrame.setClosable(true);
BasicInternalFrameUI ui = (BasicInternalFrameUI)internalFrame.getUI();
Container north = (Container)ui.getNorthPane();
north.remove(0);
north.validate();
north.repaint();
for(MouseListener listener : ((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame.getUI()).getNorthPane().getMouseListeners()){
((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame.getUI()).getNorthPane().removeMouseListener(listener);
}
internalFrame.setSelected(true);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}
只需在JInternalFrame
实例上调用dispose()
。
要做到这一点,您需要将<code>JInternalFrame</code>声明移出该方法,以便我们可以检查该实例是否不是<code>null</code<(因此存在一个现有实例,然后在创建新实例之前对该实例调用<code>dispose()</code):
JInternalFrame internalFrame1;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
if(internalFrame1 !=null) {//make sure its not null
internalFrame1.dispose();//close the previos internalframe
}
tst t = new tst();
internalFrame1 = new JInternalFrame("Test Window1"); //create new instance of internal frame
internalFrame1.add(t.getContentPane());
internalFrame1.pack();
internalFrame1.setVisible(true);
q.add(internalFrame1);
internalFrame1.setClosable(true);
BasicInternalFrameUI ui = (BasicInternalFrameUI)internalFrame1.getUI();
Container north = (Container)ui.getNorthPane();
north.remove(0);
north.validate();
north.repaint();
for(MouseListener listener : ((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame1.getUI()).getNorthPane().getMouseListeners()){
((javax.swing.plaf.basic.BasicInternalFrameUI) internalFrame1.getUI()).getNorthPane().removeMouseListener(listener);
}
internalFrame1.setSelected(true);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}
试试这个。
将此添加到JButton的事件中:
JDesktopPane.removeAll();
JDesktopPane.updateUI();
//then add the JInternalFrame into the JDesktopPane