forked from fanruan/design
pengda
4 years ago
2 changed files with 178 additions and 0 deletions
@ -0,0 +1,173 @@
|
||||
package com.fr.design.dialog; |
||||
|
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Dimension; |
||||
import java.awt.Frame; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
import java.awt.event.MouseListener; |
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.Icon; |
||||
import javax.swing.JDialog; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JScrollPane; |
||||
import javax.swing.ScrollPaneConstants; |
||||
import javax.swing.UIManager; |
||||
|
||||
/** |
||||
* 带查看详情的简要通知框 |
||||
* |
||||
*/ |
||||
public class NotificationDialog extends JDialog { |
||||
public static final int ERROR_MESSAGE = 0; |
||||
public static final int NEW_MESSAGE = 1; |
||||
public static final int WARNING_MESSAGE = 2; |
||||
public static final String HTML_TAG_1 = "<html>"; |
||||
public static final String HTML_TAG_2 = "</html>"; |
||||
private UILabel messageText; |
||||
private NotificationDialogAction notificationDialogAction; |
||||
|
||||
public NotificationDialog(Frame owner, String title, boolean isModal, int messageType, String message,NotificationDialogAction action) { |
||||
super(owner); |
||||
setTitle(title); |
||||
initComponents(messageType, message, isModal,action); |
||||
} |
||||
|
||||
public NotificationDialog(Builder builder) { |
||||
super(builder.owner); |
||||
setTitle(builder.title); |
||||
initComponents(builder.messageType, builder.message, builder.modal, builder.action); |
||||
} |
||||
|
||||
public void initComponents(int messageType, String message, boolean isModal,NotificationDialogAction action) { |
||||
notificationDialogAction = action; |
||||
setModal(isModal); |
||||
setResizable(false); |
||||
|
||||
//消息内容
|
||||
UILabel icon = new UILabel(getIconForType(messageType)); |
||||
JPanel iconPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
iconPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 8)); |
||||
iconPanel.add(icon); |
||||
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)); |
||||
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); |
||||
|
||||
//查看详情
|
||||
UILabel detailLabel = new UILabel(); |
||||
detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); |
||||
detailLabel.setForeground(Color.BLUE); |
||||
JPanel detailPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
detailPanel.add(detailLabel, BorderLayout.EAST); |
||||
add(detailPanel, BorderLayout.SOUTH); |
||||
setPreferredSize(new Dimension(262, 135)); |
||||
|
||||
detailLabel.addMouseListener(detailClickListener); |
||||
messageText.addMouseListener(detailClickListener); |
||||
|
||||
pack(); |
||||
if (getOwner() != null) { |
||||
GUICoreUtils.setWindowCenter(getOwner(), this); |
||||
} |
||||
} |
||||
|
||||
private MouseListener detailClickListener = new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
if(notificationDialogAction != null){ |
||||
hideDialog(); |
||||
notificationDialogAction.doClick(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
|
||||
public void setMessage(String message){ |
||||
messageText.setText(HTML_TAG_1 + message + HTML_TAG_2); |
||||
} |
||||
|
||||
private void hideDialog(){ |
||||
this.dispose(); |
||||
} |
||||
|
||||
protected Icon getIconForType(int messageType) { |
||||
String propertyName; |
||||
switch (messageType) { |
||||
case 0: |
||||
propertyName = "OptionPane.circularErrorIcon"; |
||||
break; |
||||
case 1: |
||||
propertyName = "OptionPane.newMessageIcon"; |
||||
break; |
||||
case 2: |
||||
propertyName = "OptionPane.warningIcon"; |
||||
break; |
||||
default: |
||||
return null; |
||||
} |
||||
return UIManager.getIcon(propertyName); |
||||
} |
||||
|
||||
public static Builder Builder() { |
||||
return new NotificationDialog.Builder(); |
||||
} |
||||
|
||||
public static final class Builder { |
||||
public int messageType = WARNING_MESSAGE; |
||||
public String message; |
||||
public boolean modal = true; |
||||
public Frame owner = null; |
||||
public String title; |
||||
public NotificationDialogAction action; |
||||
private Builder() { |
||||
|
||||
} |
||||
|
||||
public NotificationDialog build() { |
||||
return new NotificationDialog(this); |
||||
} |
||||
|
||||
public Builder owner(Frame owner) { |
||||
this.owner = owner; |
||||
return this; |
||||
} |
||||
|
||||
public Builder messageType(int messageType) { |
||||
this.messageType = messageType; |
||||
return this; |
||||
} |
||||
|
||||
public Builder message(String message) { |
||||
this.message = message; |
||||
return this; |
||||
} |
||||
|
||||
public Builder modal(boolean modal) { |
||||
this.modal = modal; |
||||
return this; |
||||
} |
||||
|
||||
public Builder title(String title) { |
||||
this.title = title; |
||||
return this; |
||||
} |
||||
|
||||
public Builder notificationDialogAction(NotificationDialogAction action) { |
||||
this.action = action; |
||||
return this; |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue