Java Swing - 使JFrame表现得像一个对话框

时间:2011-12-15 08:32:39

标签: java swing jframe jdialog swingx

我有一个主框架和一个附加的可折叠面板,我从http://sourceforge.net/apps/wordpress/miasct/2009/03/29/external-collapsible-panel/获得。 问题是可折叠面板创建未修饰的框架,扩展JFrame(实际上是来自SwingX的JXFrame)并且表现得像一个。

  1. 我如何摆脱这个:
  2. enter image description here

    1. 不要在alt + tab thingy中显示
    2. 当我在WindowsOS中使用“最小化所有窗口”然后最大化主框架时,附加的框架会保持图标化。
    3. 以下是代码:

      import com.sun.jna.platform.WindowUtils;
      import java.awt.Point;
      import java.awt.Shape;
      
      import java.awt.event.ComponentAdapter;
      import java.awt.event.ComponentEvent;
      import java.awt.geom.Ellipse2D;
      import java.awt.geom.RoundRectangle2D;
      import javax.swing.JFrame;
      
      import org.jdesktop.swingx.JXFrame;
      import ui.MainFrame;
      
      
      
      /**
       * CollapsibleFrame
       *
       * @author Devon Bryant
       * @since Mar 26, 2009
       */
      @SuppressWarnings("serial")
      public class CollapsibleFrame extends JXFrame implements ICollapsibleFrame
      {
          // The parent frame to tie this frame to
          private JFrame parentFrame = null;
      
          // Orientation (where the collapsible frame is located relative to the parent frame)
          private Orientation orientation = null;
      
          /**
           * Constructor
           * @param inName the frame name
           * @param inParentFrame the parent frame to tie this frame to
           * @param the orientation (where in respect to the parent frame to attach to)
           */
          public CollapsibleFrame(String inName, JFrame inParentFrame, Orientation inOrientation)
          {
              super(inName);
      
              parentFrame = inParentFrame;
              orientation = inOrientation;
                      setUndecorated(true);          
          }
      
          /* (non-Javadoc)
           * @see com.mia.sct.view.panel.ICollapsibleFrame#relocate()
           */
          @Override
          public void relocate()
          {
              offset(0, 0);
          }
      
          /* (non-Javadoc)
           * @see com.mia.sct.view.panel.ICollapsibleFrame#offset(int, int)
           */
          @Override
          public void offset(int inX, int inY)
          {
              if ((parentFrame != null && parentFrame.isVisible()))
              {
                  Point p = null;
                  int x = 0;
                  int y = 0;
      
                  // Calculate the new x,y coordinates for this frame based on the parents location
                  switch (orientation)
                  {
                      case TOP:
                          p = parentFrame.getLocationOnScreen();
                          x = p.x;
                          y = p.y - getHeight();
                          break;
      
                      case BOTTOM:
                          p = parentFrame.getLocationOnScreen();
                          x = p.x;
                          y = p.y + parentFrame.getHeight();
                          break;
      
                      case LEFT:
                          p = parentFrame.getLocationOnScreen();
                          x = p.x - getWidth();
                          y = parentFrame.getContentPane().getLocationOnScreen().y;
                          break;
      
                      case RIGHT:
                          p = parentFrame.getLocationOnScreen();
                          x = p.x + parentFrame.getWidth();
                          y = parentFrame.getContentPane().getLocationOnScreen().y;
                          break;
                  }   
                  x += inX;
                  y += inY;
      
                  // set the location of this frame
                  setLocation(x, y);                     
              }
          }
      
          /* (non-Javadoc)
           * @see com.mia.sct.view.panel.ICollapsibleFrame#setMask(java.awt.Shape)
           */
          public void setMask(Shape inShape)
          {
              WindowUtils.setWindowMask(this, inShape);
          }
      
          /* (non-Javadoc)
           * @see com.mia.sct.view.panel.ICollapsibleFrame#setAlpha(float)
           */
          public void setAlpha(float inAlpha)
          {
              if (WindowUtils.isWindowAlphaSupported())
              {
                  WindowUtils.setWindowAlpha(this, inAlpha);
              }
          }
      }
      

      提前致谢。

1 个答案:

答案 0 :(得分:2)

不太好的想法同时持有两个JFrames(或其SwingX衍生物),你必须改变未装饰的JDialogJWindow(其SwingX衍生物),解决三个问题,你可以正确设置

  • setParent

  • setModalModalityTypes

  • WinOS中没有iconified