当前位置: 首页 > 知识库问答 >
问题:

如何保持最小化的jinternalframe在顶部

史景铄
2023-03-14

我有四个内部框架和三个按钮在里面。当我点击最大化按钮,最大化,但它重叠所有的框架。但我的观点是,它应该显示最小化的框架。请找到下面的代码

  package Project;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;

public class Test {

    public Test() throws HeadlessException, PropertyVetoException {
        createAndShowGUI();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new Test();
                } catch (HeadlessException ex) {
                    //Logger.getLogger(MinPanel1.class.getName()).log(Level.SEVERE, null, ex);
                } catch (PropertyVetoException ex) {
                    // Logger.getLogger(MinPanel1.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        });
    }

    private void createAndShowGUI() throws HeadlessException, PropertyVetoException {
        JFrame frame = new JFrame();
        frame.setResizable(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        final JDesktopPane jdp = new JDesktopPane() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 400);
            }
        };

        frame.setContentPane(jdp);
        frame.pack();

        createAndAddInternalFrame(jdp, 0, 0);
        createAndAddInternalFrame(jdp, 200, 0);
        createAndAddInternalFrame(jdp, 400, 0);
        createAndAddInternalFrame(jdp, 600, 0);


        frame.setVisible(true);
    }

    private void createAndAddInternalFrame(final JDesktopPane jdp, int x, int y) throws PropertyVetoException {
        final JInternalFrame jInternalFrame = new JInternalFrame("Test1", true, true, true, true);
        jInternalFrame.setLocation(x, y);
               final JInternalFrame jInternalFrame1 = new JInternalFrame("Test2", true, true, true, true);
JPanel jp= new JPanel();
        JButton jb1 = new JButton("min");
        JButton jb2 = new JButton("[]");
        JButton jb3 = new JButton("X");

        jInternalFrame.setLayout(new GridLayout(2, 2,2,2));
        jInternalFrame1.add(jb1);
        jInternalFrame.setSize(200, 200);//testing
        jInternalFrame.setLayout(new GridLayout(2,2));

        JButton jb= new JButton("min");
       // jInternalFrame.add(jb);
      //  jInternalFrame.add(jb3);
        //jInternalFrame.add(jb2);
        jp.add(jb);
        jp.add(jb2);
        jp.add(jb3);

        jInternalFrame.add(jp);
        jb.addActionListener(new ActionListener()
                {


            @Override
            public void actionPerformed(ActionEvent ae) {
                        try {
                            jInternalFrame.setIcon(true);
                        } catch (PropertyVetoException ex) {
                        }

            }


        });
        jb1.addActionListener(new ActionListener()
                {


            @Override
            public void actionPerformed(ActionEvent ae) {
                        try {
                            jInternalFrame.setIcon(true);
                        } catch (PropertyVetoException ex) {
                        }

            }


        });
        jb2.addActionListener(new ActionListener()
        {


    @Override
    public void actionPerformed(ActionEvent ae) {
        try {
              jInternalFrame.setMaximum(true);

            }
        catch(Exception e)
        {

        }

    }


});jb3.addActionListener(new ActionListener()
{


@Override
public void actionPerformed(ActionEvent ae) {
        try {
            jInternalFrame.dispose();
        } catch (Exception ex) {
        }

}


});

        BasicInternalFrameTitlePane titlePane = (BasicInternalFrameTitlePane) ((BasicInternalFrameUI) jInternalFrame.getUI()).getNorthPane();
        jInternalFrame.remove(titlePane);


        jInternalFrame.setVisible(true);
        jInternalFrame1.setVisible(true);

        jdp.add(jInternalFrame);
                //jdp.add(jInternalFrame1);

    }
}

共有1个答案

夏飞跃
2023-03-14

您可以尝试:jdesktoppane#setcomponentzorder(Component com,int i)。根据文件:

将指定的组件移动到容器中指定的Z顺序索引。Z顺序决定组件的绘制顺序;Z阶最高的组件首先涂漆,Z阶最低的组件最后涂漆。如果组件重叠,则Z阶较低的组件在Z阶较高的组件上涂漆。

...

不是所有平台都支持在不调用removeNotify的情况下将重量级组件的Z顺序从一个容器改为另一个容器。没有办法检测一个平台是否支持这一点,所以开发人员不应该做任何假设。

这将允许您设置JDesktopPane中包含的JInternalFrame的顺序。

更新:

    jb2.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            try {
                if (jInternalFrame.isMaximum()) {//restore
                    jInternalFrame.pack();
                } else {//maximize
                    jInternalFrame.setMaximum(true);
                }
                jdp.remove(jInternalFrame);
                jdp.add(jInternalFrame, JDesktopPane.FRAME_CONTENT_LAYER);
                jdp.revalidate();
                jdp.repaint();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });
    jb.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            try {
                if (jInternalFrame.getLayer() == JDesktopPane.FRAME_CONTENT_LAYER) {
                    jdp.remove(jInternalFrame);
                    jdp.add(jInternalFrame, JDesktopPane.DEFAULT_LAYER);
                    jdp.revalidate();
                    jdp.repaint();
                }
                jInternalFrame.pack();
                jInternalFrame.setIcon(true);
            } catch (PropertyVetoException ex) {
            }

        }
    });
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import javax.swing.plaf.basic.BasicInternalFrameUI;

public class Test {

    public Test() throws HeadlessException, PropertyVetoException {
        createAndShowGUI();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new Test();
                } catch (HeadlessException ex) {
                    ex.printStackTrace();
                } catch (PropertyVetoException ex) {
                    ex.printStackTrace();
                }

            }
        });
    }

    private void createAndShowGUI() throws HeadlessException, PropertyVetoException {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        final JDesktopPane jdp = new JDesktopPane() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(600, 400);
            }
        };

        frame.setContentPane(jdp);
        frame.pack();

        createAndAddInternalFrame(jdp, 0, 0);
        createAndAddInternalFrame(jdp, 300, 0);
        createAndAddInternalFrame(jdp, 0, 200);

        frame.setVisible(true);
    }

    private void createAndAddInternalFrame(final JDesktopPane jdp, int x, int y) throws PropertyVetoException {
        final JInternalFrame jInternalFrame = new JInternalFrame("Test1", true, true, true, true);
        jInternalFrame.setLocation(x, y);

        JPanel jp = new JPanel();

        JButton jb = new JButton("min");
        JButton jb2 = new JButton("max/restore");
        JButton jb3 = new JButton("close");

        jInternalFrame.setLayout(new GridLayout(2, 2));

        jp.add(jb);
        jp.add(jb2);
        jp.add(jb3);

        jInternalFrame.add(jp);

        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    if (jInternalFrame.getLayer() == JDesktopPane.FRAME_CONTENT_LAYER) {
                        jdp.remove(jInternalFrame);
                        jdp.add(jInternalFrame, JDesktopPane.DEFAULT_LAYER);
                        jdp.revalidate();
                        jdp.repaint();
                    }
                    jInternalFrame.pack();
                    jInternalFrame.setIcon(true);
                } catch (PropertyVetoException ex) {
                    ex.printStackTrace();
                }

            }
        });
        jb2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    if (jInternalFrame.isMaximum()) {//restore
                        jInternalFrame.pack();
                    } else {//maximize
                        jInternalFrame.setMaximum(true);
                    }
                    jdp.remove(jInternalFrame);
                    jdp.add(jInternalFrame, JDesktopPane.FRAME_CONTENT_LAYER);
                    jdp.revalidate();
                    jdp.repaint();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });
        jb3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    jInternalFrame.dispose();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
        });

        BasicInternalFrameTitlePane titlePane = (BasicInternalFrameTitlePane) ((BasicInternalFrameUI) jInternalFrame.getUI()).getNorthPane();
        jInternalFrame.remove(titlePane);

        jInternalFrame.pack();
        jInternalFrame.setVisible(true);

        jdp.add(jInternalFrame);
    }
}
 类似资料:
  • 问题内容: 有什么办法以编程方式最小化JInternalFrame? 问题答案: “图标化或取消图标化此内部框架…”

  • 我正在编写一个应用程序,打算在双监视器设置上运行,其中一个监视器上的“Display”JFrame全屏显示,另一个监视器上的“Control”JFrame向显示器发送指令。我尝试了两种不同的全屏显示设置方法;每种技术的成功似乎都取决于操作系统。 可以在Windows中工作,但JFrame在OS X和Linux中隐藏在dock/Panel下。 我的另一种方法,利用 在我试过的三种操作系统中都能工作,

  • 我试图设计一个小游戏,并使用JInternalFrame来显示库存。不过,我遇到的问题是,当我最小化内部帧时,左下角的图标会自动隐藏在也添加到JDesktopPane的JPanel后面。当我向下拖动窗口(使窗口垂直变大)时,白色桌面在默认的灰色JPanel下面变得可见。此外,当我向下拖动时,内部框架的图标会显示出来。我试图张贴图片,但我是新来的网站,所以我不能:(。 我尝试过使用moveToFro

  • 我正在开发一个追踪用户位置的应用程序。我已经实现了一个定制服务来管理位置请求部分,它在每个活动中都能正常工作。该服务甚至出现在“运行服务”设置面板中。 当我最小化应用程序或锁定屏幕时,问题就开始了。 我想要的效果是,即使应用程序被最小化或屏幕被锁定,也能继续接收位置更新,但当用户从最近的应用程序中滑动应用程序时,停止与应用程序相关的一切(确切地说,谷歌地图或Waze的行为方式-当应用程序显示通知时

  • 问题内容: 我如何避免滚动页面的其余部分?我考虑过使用和,只是想知道是否有更简单,更用户友好的方法,这样做的最佳实践是什么? 问题答案: 使用的包含您的头,喜欢的东西 在此示例中,当开始时位于下方100px处,但随着用户滚动,它保持原位。当然,不用说,您需要确保有背景,以便当两个s重叠时,其内容实际上是可见的。

  • 问题内容: 我正在使用和作为模块捆绑程序编写一个Web应用程序。到目前为止,我的代码还很轻巧,整个文件夹的大小为25 kb。 我创建的虽然是2.2 mb。使用标志运行优化后,它将捆绑包减少到700kb,这仍然非常大。 我调查了文件,文件大小为130kb。 Webpack是否可能产生如此大的文件,或者我做错了什么? webpack.config.js 编辑 package.json: 问题答案: 根