在JAVA中有获取当前窗体句柄(ID)的API吗? 我怎么也找不到这样的API.我的窗体继承的是JInternalFrame

解决方案 »

  1.   

    帮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;
       }
      

  2.   


       /**
          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;
    }
      

  3.   

    我找了一下 lixiaoxue85(蛮野蛮) 的代码中,      JInternalFrame[] frames = desktop.getAllFrames();
          for (int i = 0; i < frames.length; i++)
          {  
             if (frames[i].isSelected())
             { ... }
          }
    这段应该可以,把 "..." 换成你要对该JInternalFrame操作的语句。
    比如frames[i].dispose();