最小化可调整大小的 JDialog

Minimize a resizable JDialog

我正在开发一个带有主要 window(扩展 JFrame)的 swing 应用程序,从中可以打开多个 child windows(超过 1当代)。
这些 windows 都是 non-modal 并且可以调整大小。
到目前为止,我将这些 'child' windows 实现为 JFrame。但是,对于每个打开的 Window.
,我的 Windows 任务栏上都有一个新图标 因此,我尝试将这些 windows 实现为类型为 ModalityType.MODELESS.
JDialog 看起来不错,只是 JDialog 没有最小化按钮。

有办法解决这个问题吗?
即,我需要创建可以最小化的 non-modal 和可调整大小的 child windows。
JInternalFrame 不是一个选项,因为主框架不仅仅是一个带有 JDesktopPane 和 child 的容器 windows 应该能够跨越主框架的边界 window.

对于那些感兴趣的人:
Child windows 在 opened/closed.
时在主 window 上注册和注销自己 主 window 有一个带有 'Windows' 项的菜单,child windows 是 registration/unregistration.
上那个菜单的 added/removed 用户可以通过选择此菜单中的项目在各种 windows 之间切换。

我提供两个建议。

  • 一个。不要使用关闭按钮删除内容。
  • 乙。将子 jframes 的类型设置为实用程序。

我认为让 JDialog 关闭按钮销毁数据会导致您的用户丢失数据。我会改为使用关闭来隐藏 window,然后在对话框内控制 cancel/finish/restart。

import java.awt.*;

public class DiFrame{
    static JDialog log;
    static JFrame ame;
    public static void main(String[] args){
        JFrame frame = new JFrame("Father of two");
        
        JButton one  = new JButton("dialog");
        
        one.addActionListener( evt->{
            if(log==null){
                log = new JDialog(frame, "dialog child", false);
                log.add(new JTextArea("fresh start"));
                log.pack();
                log.setVisible(true);
            } else{
                log.setVisible(true);
            }
        });
        
        JButton two = new JButton("frame");
        
        two.addActionListener( evt->{
            if(ame==null){
                ame = new JFrame("frame child");
                ame.add( new JTextArea("fresh start") );
                ame.setType(Window.Type.UTILITY);
                ame.pack();
                ame.setVisible(true);
            } else{
                ame.setVisible(true);
            }
        });
        frame.add(one, BorderLayout.NORTH);
        frame.add(two, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

  
}

单击对话框按钮,它会显示对话框。然后可以修改文本区域。对话框关闭后可以重新打开。

单击框架按钮,将显示一个 jframe。 (我实际上无法检查它是否显示为新应用程序,因为它不在我的计算机上。)