帮LZ顶下 再贴个相关的代码,能派上用处的话,LZ就参考下吧 /** @version 1.10 2004-08-22 @author Cay Horstmann */import java.awt.*; import java.awt.event.*; import java.beans.*; import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; import javax.swing.event.*;/** This program demonstrates the use of internal frames. */ public class InternalFrameTest { public static void main(String[] args) { JFrame frame = new DesktopFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }/** This desktop frame contains editor panes that show HTML documents. */ class DesktopFrame extends JFrame { public DesktopFrame() { setTitle("InternalFrameTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); desktop = new JDesktopPane(); add(desktop, BorderLayout.CENTER); // set up menus JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); JMenuItem openItem = new JMenuItem("New"); openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { createInternalFrame( new JLabel(new ImageIcon(planets[counter] + ".gif")), planets[counter]); counter = (counter + 1) % planets.length; } }); fileMenu.add(openItem); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); fileMenu.add(exitItem); JMenu windowMenu = new JMenu("Window"); menuBar.add(windowMenu); JMenuItem nextItem = new JMenuItem("Next"); nextItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { selectNextWindow(); } }); windowMenu.add(nextItem); JMenuItem cascadeItem = new JMenuItem("Cascade"); cascadeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { cascadeWindows(); } }); windowMenu.add(cascadeItem); JMenuItem tileItem = new JMenuItem("Tile"); tileItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { tileWindows(); } }); windowMenu.add(tileItem); final JCheckBoxMenuItem dragOutlineItem = new JCheckBoxMenuItem("Drag Outline"); dragOutlineItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { desktop.setDragMode(dragOutlineItem.isSelected() ? JDesktopPane.OUTLINE_DRAG_MODE : JDesktopPane.LIVE_DRAG_MODE); } }); windowMenu.add(dragOutlineItem); } /** Creates an internal frame on the desktop. @param c the component to display in the internal frame @param t the title of the internal frame. */ public void createInternalFrame(Component c, String t) { final JInternalFrame iframe = new JInternalFrame(t, true, // resizable true, // closable true, // maximizable true); // iconifiable iframe.add(c, BorderLayout.CENTER); desktop.add(iframe); iframe.setFrameIcon(new ImageIcon("document.gif")); // add listener to confirm frame closing iframe.addVetoableChangeListener(new VetoableChangeListener() { public void vetoableChange(PropertyChangeEvent event) throws PropertyVetoException { String name = event.getPropertyName(); Object value = event.getNewValue(); // we only want to check attempts to close a frame if (name.equals("closed") && value.equals(true)) { // ask user if it is ok to close int result = JOptionPane.showInternalConfirmDialog( iframe, "OK to close?", "Select an Option", JOptionPane.YES_NO_OPTION); // if the user doesn't agree, veto the close if (result != JOptionPane.YES_OPTION) throw new PropertyVetoException("User canceled close", event); } } }); // position frame int width = desktop.getWidth() / 2; int height = desktop.getHeight() / 2; iframe.reshape(nextFrameX, nextFrameY, width, height); iframe.show(); // select the frame--might be vetoed try { iframe.setSelected(true); } catch (PropertyVetoException e) {} frameDistance = iframe.getHeight() - iframe.getContentPane().getHeight(); // compute placement for next frame nextFrameX += frameDistance; nextFrameY += frameDistance; if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0; if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0; }
/** Cascades the non-iconified internal frames of the desktop. */ public void cascadeWindows() { int x = 0; int y = 0; int width = desktop.getWidth() / 2; int height = desktop.getHeight() / 2; for (JInternalFrame frame : desktop.getAllFrames()) { if (!frame.isIcon()) { try { // try to make maximized frames resizable; this might be vetoed frame.setMaximum(false); frame.reshape(x, y, width, height); x += frameDistance; y += frameDistance; // wrap around at the desktop edge if (x + width > desktop.getWidth()) x = 0; if (y + height > desktop.getHeight()) y = 0; } catch (PropertyVetoException e) {} } } } /** Tiles the non-iconified internal frames of the desktop. */ public void tileWindows() { // count frames that aren't iconized int frameCount = 0; for (JInternalFrame frame : desktop.getAllFrames()) if (!frame.isIcon()) frameCount++; if (frameCount == 0) return; int rows = (int) Math.sqrt(frameCount); int cols = frameCount / rows; int extra = frameCount % rows; // number of columns with an extra row int width = desktop.getWidth() / cols; int height = desktop.getHeight() / rows; int r = 0; int c = 0; for (JInternalFrame frame : desktop.getAllFrames()) { if (!frame.isIcon()) { try { frame.setMaximum(false); frame.reshape(c * width, r * height, width, height); r++; if (r == rows) { r = 0; c++; if (c == cols - extra) { // start adding an extra row rows++; height = desktop.getHeight() / rows; } } } catch (PropertyVetoException e) {} } } } /** Brings the next non-iconified internal frame to the front. */ public void selectNextWindow() { JInternalFrame[] frames = desktop.getAllFrames(); for (int i = 0; i < frames.length; i++) { if (frames[i].isSelected()) { // find next frame that isn't an icon and can be selected int next = (i + 1) % frames.length; while (next != i) { if (!frames[next].isIcon()) { try { // all other frames are icons or veto selection frames[next].setSelected(true); frames[next].toFront(); frames[i].toBack(); return; } catch (PropertyVetoException e) {} } next = (next + 1) % frames.length; } } } } private JDesktopPane desktop; private int nextFrameX; private int nextFrameY; private int frameDistance; private int counter; private static final String[] planets = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", }; private static final int DEFAULT_WIDTH = 600; private static final int DEFAULT_HEIGHT = 400; }
我找了一下 lixiaoxue85(蛮野蛮) 的代码中, JInternalFrame[] frames = desktop.getAllFrames(); for (int i = 0; i < frames.length; i++) { if (frames[i].isSelected()) { ... } } 这段应该可以,把 "..." 换成你要对该JInternalFrame操作的语句。 比如frames[i].dispose();
/**
@version 1.10 2004-08-22
@author Cay Horstmann
*/import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;/**
This program demonstrates the use of internal frames.
*/
public class InternalFrameTest
{
public static void main(String[] args)
{
JFrame frame = new DesktopFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}/**
This desktop frame contains editor panes that show HTML
documents.
*/
class DesktopFrame extends JFrame
{
public DesktopFrame()
{
setTitle("InternalFrameTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); desktop = new JDesktopPane();
add(desktop, BorderLayout.CENTER); // set up menus JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
JMenuItem openItem = new JMenuItem("New");
openItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
createInternalFrame(
new JLabel(new ImageIcon(planets[counter] + ".gif")),
planets[counter]);
counter = (counter + 1) % planets.length;
}
});
fileMenu.add(openItem);
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
fileMenu.add(exitItem);
JMenu windowMenu = new JMenu("Window");
menuBar.add(windowMenu);
JMenuItem nextItem = new JMenuItem("Next");
nextItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
selectNextWindow();
}
});
windowMenu.add(nextItem);
JMenuItem cascadeItem = new JMenuItem("Cascade");
cascadeItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
cascadeWindows();
}
});
windowMenu.add(cascadeItem);
JMenuItem tileItem = new JMenuItem("Tile");
tileItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
tileWindows();
}
});
windowMenu.add(tileItem);
final JCheckBoxMenuItem dragOutlineItem = new JCheckBoxMenuItem("Drag Outline");
dragOutlineItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
desktop.setDragMode(dragOutlineItem.isSelected()
? JDesktopPane.OUTLINE_DRAG_MODE
: JDesktopPane.LIVE_DRAG_MODE);
}
});
windowMenu.add(dragOutlineItem);
} /**
Creates an internal frame on the desktop.
@param c the component to display in the internal frame
@param t the title of the internal frame.
*/
public void createInternalFrame(Component c, String t)
{
final JInternalFrame iframe = new JInternalFrame(t,
true, // resizable
true, // closable
true, // maximizable
true); // iconifiable iframe.add(c, BorderLayout.CENTER);
desktop.add(iframe); iframe.setFrameIcon(new ImageIcon("document.gif")); // add listener to confirm frame closing
iframe.addVetoableChangeListener(new
VetoableChangeListener()
{
public void vetoableChange(PropertyChangeEvent event)
throws PropertyVetoException
{
String name = event.getPropertyName();
Object value = event.getNewValue(); // we only want to check attempts to close a frame
if (name.equals("closed") && value.equals(true))
{
// ask user if it is ok to close
int result = JOptionPane.showInternalConfirmDialog(
iframe, "OK to close?", "Select an Option", JOptionPane.YES_NO_OPTION); // if the user doesn't agree, veto the close
if (result != JOptionPane.YES_OPTION)
throw new PropertyVetoException("User canceled close", event);
}
}
}); // position frame
int width = desktop.getWidth() / 2;
int height = desktop.getHeight() / 2;
iframe.reshape(nextFrameX, nextFrameY, width, height); iframe.show(); // select the frame--might be vetoed
try
{
iframe.setSelected(true);
}
catch (PropertyVetoException e)
{} frameDistance = iframe.getHeight() - iframe.getContentPane().getHeight(); // compute placement for next frame nextFrameX += frameDistance;
nextFrameY += frameDistance;
if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;
if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;
}
/**
Cascades the non-iconified internal frames of the desktop.
*/
public void cascadeWindows()
{
int x = 0;
int y = 0;
int width = desktop.getWidth() / 2;
int height = desktop.getHeight() / 2; for (JInternalFrame frame : desktop.getAllFrames())
{
if (!frame.isIcon())
{
try
{
// try to make maximized frames resizable; this might be vetoed
frame.setMaximum(false);
frame.reshape(x, y, width, height); x += frameDistance;
y += frameDistance;
// wrap around at the desktop edge
if (x + width > desktop.getWidth()) x = 0;
if (y + height > desktop.getHeight()) y = 0;
}
catch (PropertyVetoException e)
{}
}
}
} /**
Tiles the non-iconified internal frames of the desktop.
*/
public void tileWindows()
{
// count frames that aren't iconized
int frameCount = 0;
for (JInternalFrame frame : desktop.getAllFrames())
if (!frame.isIcon()) frameCount++;
if (frameCount == 0) return; int rows = (int) Math.sqrt(frameCount);
int cols = frameCount / rows;
int extra = frameCount % rows;
// number of columns with an extra row int width = desktop.getWidth() / cols;
int height = desktop.getHeight() / rows;
int r = 0;
int c = 0;
for (JInternalFrame frame : desktop.getAllFrames())
{
if (!frame.isIcon())
{
try
{
frame.setMaximum(false);
frame.reshape(c * width, r * height, width, height);
r++;
if (r == rows)
{
r = 0;
c++;
if (c == cols - extra)
{
// start adding an extra row
rows++;
height = desktop.getHeight() / rows;
}
}
}
catch (PropertyVetoException e)
{}
}
}
} /**
Brings the next non-iconified internal frame to the front.
*/
public void selectNextWindow()
{
JInternalFrame[] frames = desktop.getAllFrames();
for (int i = 0; i < frames.length; i++)
{
if (frames[i].isSelected())
{
// find next frame that isn't an icon and can be selected
int next = (i + 1) % frames.length;
while (next != i)
{
if (!frames[next].isIcon())
{
try
{
// all other frames are icons or veto selection
frames[next].setSelected(true);
frames[next].toFront();
frames[i].toBack();
return;
}
catch (PropertyVetoException e)
{}
}
next = (next + 1) % frames.length;
}
}
}
} private JDesktopPane desktop;
private int nextFrameX;
private int nextFrameY;
private int frameDistance;
private int counter;
private static final String[] planets =
{
"Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
"Pluto",
}; private static final int DEFAULT_WIDTH = 600;
private static final int DEFAULT_HEIGHT = 400;
}
for (int i = 0; i < frames.length; i++)
{
if (frames[i].isSelected())
{ ... }
}
这段应该可以,把 "..." 换成你要对该JInternalFrame操作的语句。
比如frames[i].dispose();