|
|
|
@ -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,18 @@ 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); |
|
|
|
|
setFocusable(false); |
|
|
|
|
setAutoRequestFocus(false); |
|
|
|
|
setResizable(false); |
|
|
|
|
setTitle(title); |
|
|
|
|
initComponents(messageType, message, isModal,action); |
|
|
|
|
initComponents(messageType, message, isModal, action); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public NotificationDialog(Builder builder) { |
|
|
|
@ -47,27 +55,29 @@ 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); |
|
|
|
|
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, 10)); |
|
|
|
|
centerPanel.setBorder(BorderFactory.createEmptyBorder(8, 0, 5, 20)); |
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
pack(); |
|
|
|
|
if (getOwner() != null) { |
|
|
|
|
GUICoreUtils.setWindowCenter(getOwner(), this); |
|
|
|
|
} |
|
|
|
|
addMouseListener(bodyMouseListener); |
|
|
|
|
|
|
|
|
|
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() { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|