@ -31,7 +31,6 @@ import java.awt.Color;
import java.awt.Cursor ;
import java.awt.Cursor ;
import java.awt.Dimension ;
import java.awt.Dimension ;
import java.awt.FlowLayout ;
import java.awt.FlowLayout ;
import java.awt.Font ;
import java.awt.Frame ;
import java.awt.Frame ;
import java.awt.Graphics ;
import java.awt.Graphics ;
import java.awt.Graphics2D ;
import java.awt.Graphics2D ;
@ -241,51 +240,12 @@ public abstract class UIControlPane extends JControlPane {
}
}
private void hideDialog ( ) {
private void hideDialog ( ) {
// 检查是否有子弹窗,如果有,则不隐藏
if ( needToHidePopupEditDialog ( ) ) {
for ( Window window : getOwnedWindows ( ) ) {
saveSettings ( ) ;
if ( window . isVisible ( ) ) {
setVisible ( false ) ;
return ;
PopupDialogSaveAction saveAction = OSSupportCenter . getAction ( PopupDialogSaveAction . class ) ;
}
saveAction . unregister ( ) ;
}
// 如果有可见模态对话框,则不隐藏
for ( Window window : DesignerContext . getDesignerFrame ( ) . getOwnedWindows ( ) ) {
if ( window instanceof JDialog & & window . isVisible ( ) & & ( ( JDialog ) window ) . isModal ( ) ) {
return ;
}
}
try {
//没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame()
Frame sharedOwnerFrame = Reflect . on ( SwingUtilities . class ) . call ( "getSharedOwnerFrame" ) . get ( ) ;
for ( Window window : sharedOwnerFrame . getOwnedWindows ( ) ) {
if ( window instanceof JDialog & & window . isVisible ( ) & & ( ( JDialog ) window ) . isModal ( ) ) {
// 如果有可见模态对话框,则不隐藏
return ;
}
}
} catch ( Exception ignore ) {
//do nothing
}
// 要隐藏 先检查有没有非法输入
// 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框
try {
checkValid ( ) ;
} catch ( Exception exp ) {
// 存在非法输入 拒绝隐藏
this . setAlwaysOnTop ( true ) ;
FineJOptionPane . showMessageDialog ( this , exp . getMessage ( ) ) ;
this . requestFocus ( ) ;
return ;
}
if ( JavaFxNativeFileChooser . isShowDialogState ( ) ) {
JavaFxNativeFileChooser . setShowDialogState ( false ) ;
return ;
}
}
saveSettings ( ) ;
setVisible ( false ) ;
PopupDialogSaveAction saveAction = OSSupportCenter . getAction ( PopupDialogSaveAction . class ) ;
saveAction . unregister ( ) ;
}
}
private void initListener ( ) {
private void initListener ( ) {
@ -302,6 +262,54 @@ public abstract class UIControlPane extends JControlPane {
}
}
}
}
/ * *
* 是否需要隐藏popupEditDialog
* /
protected boolean needToHidePopupEditDialog ( ) {
// 检查是否有子弹窗,如果有,则不隐藏
for ( Window window : popupEditDialog . getOwnedWindows ( ) ) {
if ( window . isVisible ( ) ) {
return false ;
}
}
// 如果有可见模态对话框,则不隐藏
for ( Window window : DesignerContext . getDesignerFrame ( ) . getOwnedWindows ( ) ) {
if ( window instanceof JDialog & & window . isVisible ( ) & & ( ( JDialog ) window ) . isModal ( ) ) {
return false ;
}
}
try {
//没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame()
Frame sharedOwnerFrame = Reflect . on ( SwingUtilities . class ) . call ( "getSharedOwnerFrame" ) . get ( ) ;
for ( Window window : sharedOwnerFrame . getOwnedWindows ( ) ) {
if ( window instanceof JDialog & & window . isVisible ( ) & & ( ( JDialog ) window ) . isModal ( ) ) {
// 如果有可见模态对话框,则不隐藏
return false ;
}
}
} catch ( Exception ignore ) {
//do nothing
}
// 要隐藏 先检查有没有非法输入
// 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框
try {
checkValid ( ) ;
} catch ( Exception exp ) {
// 存在非法输入 拒绝隐藏
popupEditDialog . setAlwaysOnTop ( true ) ;
FineJOptionPane . showMessageDialog ( this , exp . getMessage ( ) ) ;
popupEditDialog . requestFocus ( ) ;
return false ;
}
if ( JavaFxNativeFileChooser . isShowDialogState ( ) ) {
JavaFxNativeFileChooser . setShowDialogState ( false ) ;
return false ;
}
return true ;
}
// 移动弹出编辑面板的工具条
// 移动弹出编辑面板的工具条
private class PopupToolPane extends JPanel {
private class PopupToolPane extends JPanel {
private JDialog parentDialog ; // 如果不在对话框中,值为null
private JDialog parentDialog ; // 如果不在对话框中,值为null