我正在开发一个需要能够在单个监视器和多个监视器上运行的应用程序。我目前只知道实现我需要的两种方法,而且都不理想。
如果我在所有监视器上创建一个JFrame,我可以将JInternalFrame用于我的可移动窗口。缺点是当我使用不同尺寸/分辨率的显示器时这种方法不起作用,因为工具栏或我添加到JFrame的任何其他东西都不会排列,我可能会留下一些操作系统显示。< / p>
另一种方法是为每个图形设备创建一个新的JFrame,并使用JDialogs作为我的窗口。这里的缺点是我对JDialogs的控制较少,不能限制移动。理想情况下,我希望能够约束JDialog的位置,使其不能与我的工具栏重叠。
有更好的方法吗?
答案 0 :(得分:0)
您可以使用后一种方法,只需将ComponentListener添加到每个JDialog中:
final JDialog dialog = new JDialog();
dialog.addComponentListener(new ComponentAdapter()
{
@Override
public void componentMoved(ComponentEvent e)
{
if (dialog.getBounds().intersects(toolbar.getBounds()))
moveToAvoidConflict(dialog);
}
}
您的moveToAvoidConflict()
方法会向上,向下,向左或向右移动对话框,以便它不再与您的工具栏相交。