1

メイン フレームと、 http://sourceforge.net/apps/wordpress/miasct/2009/03/29/external-collapsible-panel/から取得した折りたたみ可能なパネルが付属しています。問題は、折りたたみ可能なパネルが JFrame (実際には SwingX の JXFrame) を拡張し、そのように動作する装飾されていないフレームを作成することです。

  1. どうすればこれを取り除くことができますか:

ここに画像の説明を入力

  1. Alt + Tabで表示しないでください
  2. WindowsOS で「すべてのウィンドウを最小化」を使用してからメイン フレームを最大化すると、接続されたフレームがアイコン化されたままになります。

そのためのコードは次のとおりです。

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

前もって感謝します。

4

1 に答える 1

2

2 つJFrames(またはその SwingX 派生物) を同時に保持するのはお勧めできません。3 つの問題を解決する Un-DecoratedJDialogまたはJWindow(その SwingX 派生物) を変更する必要があり、正しく設定することができます。

  • setParent

  • setModalModalityTypes

  • いいえiconified_

于 2011-12-15T09:07:52.883 に答える