最小化可调整大小的 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。 (我实际上无法检查它是否显示为新应用程序,因为它不在我的计算机上。)
我正在开发一个带有主要 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。 (我实际上无法检查它是否显示为新应用程序,因为它不在我的计算机上。)