@ -1,12 +1,14 @@
package com.fr.design.dialog ;
import com.fr.concurrent.NamedThreadFactory ;
import com.fr.design.gui.ilable.UILabel ;
import com.fr.design.i18n.Toolkit ;
import com.fr.design.layout.FRGUIPaneFactory ;
import com.fr.design.mainframe.DesignerContext ;
import com.fr.design.notification.Notification ;
import com.fr.design.notification.NotificationCenter ;
import com.fr.design.utils.gui.GUICoreUtils ;
import com.fr.module.ModuleContext ;
import java.awt.BorderLayout ;
import java.awt.Color ;
import java.awt.Dimension ;
@ -14,6 +16,8 @@ import java.awt.Frame;
import java.awt.event.MouseAdapter ;
import java.awt.event.MouseEvent ;
import java.awt.event.MouseListener ;
import java.util.concurrent.ScheduledExecutorService ;
import java.util.concurrent.TimeUnit ;
import javax.swing.BorderFactory ;
import javax.swing.Icon ;
import javax.swing.JDialog ;
@ -24,7 +28,6 @@ import javax.swing.UIManager;
/ * *
* 带查看详情的简要通知框
*
* /
public class NotificationDialog extends JDialog {
public static final int ERROR_MESSAGE = 0 ;
@ -32,13 +35,15 @@ public class NotificationDialog extends JDialog {
public static final int WARNING_MESSAGE = 2 ;
public static final String HTML_TAG_1 = "<html>" ;
public static final String HTML_TAG_2 = "</html>" ;
private static final String HIDE_MSG = "HIDE_MSG_TIMER" ;
private UILabel messageText ;
private NotificationDialogAction notificationDialogAction ;
private ScheduledExecutorService TIMER ;
public NotificationDialog ( Frame owner , String title , boolean isModal , int messageType , String message , NotificationDialogAction action ) {
public NotificationDialog ( Frame owner , String title , boolean isModal , int messageType , String message , NotificationDialogAction action ) {
super ( owner ) ;
setTitle ( title ) ;
initComponents ( messageType , message , isModal , action ) ;
initComponents ( messageType , message , isModal , action ) ;
}
public NotificationDialog ( Builder builder ) {
@ -47,27 +52,32 @@ public class NotificationDialog extends JDialog {
initComponents ( builder . messageType , builder . message , builder . modal , builder . action ) ;
}
public void initComponents ( int messageType , String message , boolean isModal , NotificationDialogAction action ) {
NotificationCenter . getInstance ( ) . addNotification ( new Notification ( messageType , message , action ) ) ;
public void initComponents ( int messageType , String message , boolean isModal , NotificationDialogAction action ) {
NotificationCenter . getInstance ( ) . addNotification ( new Notification ( messageType , message , action ) ) ;
notificationDialogAction = action ;
setModal ( isModal ) ;
setFocusable ( false ) ;
setAutoRequestFocus ( false ) ;
setResizable ( false ) ;
JPanel body = FRGUIPaneFactory . createBorderLayout_L_Pane ( ) ;
body . setBorder ( BorderFactory . createEmptyBorder ( 0 , 0 , 0 , 0 ) ) ;
//消息内容
UILabel icon = new UILabel ( getIconForType ( messageType ) ) ;
JPanel iconPanel = FRGUIPaneFactory . createBorderLayout_L_Pane ( ) ;
iconPanel . setBorder ( BorderFactory . createEmptyBorder ( 0 , 10 , 10 , 8 ) ) ;
iconPanel . setBorder ( BorderFactory . createEmptyBorder ( 0 , 5 , 10 , 8 ) ) ;
iconPanel . add ( icon ) ;
add ( iconPanel , BorderLayout . WEST ) ;
body . add ( iconPanel , BorderLayout . WEST ) ;
messageText = new UILabel ( HTML_TAG_1 + message + HTML_TAG_2 ) ;
messageText . setForeground ( new Color ( 51 , 51 , 52 ) ) ;
JPanel centerPanel = FRGUIPaneFactory . createBorderLayout_L_Pane ( ) ;
centerPanel . setBorder ( BorderFactory . createEmptyBorder ( 10 , 0 , 10 , 1 0) ) ;
centerPanel . setBorder ( BorderFactory . createEmptyBorder ( 8 , 0 , 5 , 2 0) ) ;
JScrollPane jScrollPane = new JScrollPane ( messageText , ScrollPaneConstants . VERTICAL_SCROLLBAR_AS_NEEDED , ScrollPaneConstants . HORIZONTAL_SCROLLBAR_NEVER ) ;
jScrollPane . setBorder ( BorderFactory . createEmptyBorder ( ) ) ;
centerPanel . add ( jScrollPane , BorderLayout . CENTER ) ;
add ( centerPanel , BorderLayout . CENTER ) ;
centerPanel . setPreferredSize ( new Dimension ( 230 , 95 ) ) ;
body . add ( centerPanel , BorderLayout . CENTER ) ;
//查看详情
UILabel detailLabel = new UILabel ( ) ;
@ -75,37 +85,67 @@ public class NotificationDialog extends JDialog {
detailLabel . setForeground ( Color . BLUE ) ;
JPanel detailPanel = FRGUIPaneFactory . createBorderLayout_L_Pane ( ) ;
detailPanel . add ( detailLabel , BorderLayout . EAST ) ;
add ( detailPanel , BorderLayout . SOUTH ) ;
setPreferredSize ( new Dimension ( 262 , 135 ) ) ;
body . add ( detailPanel , BorderLayout . SOUTH ) ;
detailLabel . addMouseListener ( detailClickListener ) ;
messageText . addMouseListener ( detailClickListener ) ;
addMouseListener ( bodyMouseListener ) ;
pack ( ) ;
if ( getOwner ( ) ! = null ) {
GUICoreUtils . setWindowCenter ( getOwner ( ) , this ) ;
}
add ( body ) ;
Dimension dimension = body . getPreferredSize ( ) ;
setSize ( dimension . width , dimension . height ) ;
setLocation ( ( DesignerContext . getDesignerFrame ( ) . getWidth ( ) - dimension . width - 30 + DesignerContext . getDesignerFrame ( ) . getX ( ) ) ,
DesignerContext . getDesignerFrame ( ) . getY ( ) + DesignerContext . getDesignerFrame ( ) . getHeight ( ) - dimension . height - 30 ) ;
disappear ( ) ;
}
private MouseListener detailClickListener = new MouseAdapter ( ) {
@Override
public void mouseClicked ( MouseEvent e ) {
if ( notificationDialogAction ! = null ) {
if ( notificationDialogAction ! = null ) {
hideDialog ( ) ;
notificationDialogAction . doClick ( ) ;
}
}
} ;
private MouseListener bodyMouseListener = new MouseAdapter ( ) {
@Override
public void mouseEntered ( MouseEvent e ) {
if ( TIMER ! = null ) {
TIMER . shutdownNow ( ) ;
}
}
@Override
public void mouseExited ( MouseEvent e ) {
disappear ( ) ;
}
} ;
public void disappear ( ) {
TIMER = createScheduleExecutorService ( ) ;
TIMER . schedule ( new Runnable ( ) {
@Override
public void run ( ) {
hideDialog ( ) ;
}
} , 10000 , TimeUnit . MILLISECONDS ) ;
}
private ScheduledExecutorService createScheduleExecutorService ( ) {
return ModuleContext . getExecutor ( ) . newSingleThreadScheduledExecutor ( new NamedThreadFactory ( HIDE_MSG ) ) ;
}
/ * *
* 设置通知消息
* /
public void setMessage ( String message ) {
public void setMessage ( String message ) {
messageText . setText ( HTML_TAG_1 + message + HTML_TAG_2 ) ;
}
private void hideDialog ( ) {
private void hideDialog ( ) {
this . setVisible ( false ) ;
this . dispose ( ) ;
}
@ -138,6 +178,7 @@ public class NotificationDialog extends JDialog {
public Frame owner = null ;
public String title ;
public NotificationDialogAction action ;
private Builder ( ) {
}