forked from fanruan/design
vito
4 years ago
5 changed files with 432 additions and 21 deletions
@ -0,0 +1,328 @@ |
|||||||
|
package com.fr.design.dialog; |
||||||
|
|
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextarea.UITextArea; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.Icon; |
||||||
|
import javax.swing.JLabel; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.UIManager; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Cursor; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Frame; |
||||||
|
import java.awt.Insets; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 可展开对话框 |
||||||
|
* |
||||||
|
* <pre> |
||||||
|
* UIExpandDialog.Builder() |
||||||
|
* .owner(jf) |
||||||
|
* .title("title") |
||||||
|
* .messageType(UIExpandDialog.WARNING_MESSAGE) |
||||||
|
* .message("message text") |
||||||
|
* .detail("detail") |
||||||
|
* .expand(false) |
||||||
|
* .modal(false) |
||||||
|
* .dialogActionListener(new DialogActionAdapter(){ |
||||||
|
* public void doOk() { |
||||||
|
* System.out.println("OK"); |
||||||
|
* } |
||||||
|
* }).build().setVisible(true); |
||||||
|
* </pre> |
||||||
|
* |
||||||
|
* @author vito |
||||||
|
* @version 10.0 |
||||||
|
* Created by vito on 2021/5/19 |
||||||
|
*/ |
||||||
|
public class UIExpandDialog extends UIDialog { |
||||||
|
public static final int MARGIN = 10; |
||||||
|
public static final int TEXT_AREA_ROW = 5; |
||||||
|
public static final int GAP = 5; |
||||||
|
|
||||||
|
public static final int ERROR_MESSAGE = 0; |
||||||
|
public static final int INFORMATION_MESSAGE = 1; |
||||||
|
public static final int WARNING_MESSAGE = 2; |
||||||
|
public static final int QUESTION_MESSAGE = 3; |
||||||
|
|
||||||
|
public static final String HTML_TAG_1 = "<html>"; |
||||||
|
public static final String HTML_TAG_2 = "</html>"; |
||||||
|
|
||||||
|
private final JPanel foldBar = new JPanel(); |
||||||
|
private final JPanel expandableContentPane = new JPanel(); |
||||||
|
private final UILabel narrow = new UILabel(); |
||||||
|
private final UILabel narrowHit = new UILabel(); |
||||||
|
private final UIButton buttonOK; |
||||||
|
private final UIButton buttonCancel; |
||||||
|
private JLabel msg; |
||||||
|
private final UITextArea textArea = new UITextArea(); |
||||||
|
|
||||||
|
public UIExpandDialog(Frame owner, String title, boolean isModal, |
||||||
|
int messageType, String message, String detail, |
||||||
|
String okText, String cancelText, boolean isExpand) { |
||||||
|
super(owner); |
||||||
|
buttonOK = new UIButton(okText); |
||||||
|
buttonCancel = new UIButton(cancelText); |
||||||
|
setTitle(title); |
||||||
|
setModal(isModal); |
||||||
|
initComponents(messageType, message, detail, isModal, isExpand, null); |
||||||
|
} |
||||||
|
|
||||||
|
public UIExpandDialog(Builder builder) { |
||||||
|
super(builder.owner); |
||||||
|
buttonOK = new UIButton(builder.okText); |
||||||
|
buttonCancel = new UIButton(builder.cancelText); |
||||||
|
setTitle(builder.title); |
||||||
|
setModal(builder.modal); |
||||||
|
initComponents(builder.messageType, builder.message, builder.detail, |
||||||
|
builder.modal, builder.expand, builder.dialogActionListener); |
||||||
|
} |
||||||
|
|
||||||
|
public void initComponents(int messageType, String message, String detail, |
||||||
|
boolean isModal, boolean isExpand, DialogActionListener l) { |
||||||
|
|
||||||
|
setLayout(new BorderLayout(GAP, GAP)); |
||||||
|
setResizable(false); |
||||||
|
setModal(isModal); |
||||||
|
getRootPane().setDefaultButton(buttonOK); |
||||||
|
|
||||||
|
// 标题面板
|
||||||
|
UILabel icon = new UILabel(getIconForType(messageType)); |
||||||
|
msg = new JLabel(HTML_TAG_1 + message + HTML_TAG_2); |
||||||
|
msg.setPreferredSize(new Dimension(300, 50)); |
||||||
|
JPanel mainMsg = new JPanel(); |
||||||
|
mainMsg.setLayout(new FlowLayout(FlowLayout.LEFT, MARGIN, MARGIN)); |
||||||
|
mainMsg.setPreferredSize(new Dimension(380, 60)); |
||||||
|
mainMsg.add(icon); |
||||||
|
mainMsg.add(msg); |
||||||
|
add(mainMsg, BorderLayout.NORTH); |
||||||
|
|
||||||
|
// 内容面板
|
||||||
|
JPanel contentPanel = new JPanel(); |
||||||
|
contentPanel.setLayout(new BorderLayout(GAP, GAP)); |
||||||
|
foldBar.setLayout(new FlowLayout(FlowLayout.LEFT, MARGIN, 0)); |
||||||
|
foldBar.add(narrow); |
||||||
|
foldBar.add(narrowHit); |
||||||
|
contentPanel.add(foldBar, BorderLayout.NORTH); |
||||||
|
|
||||||
|
textArea.setEditable(false); |
||||||
|
textArea.setRows(TEXT_AREA_ROW); |
||||||
|
textArea.setMargin(new Insets(GAP, GAP, GAP, GAP)); |
||||||
|
textArea.setEditable(false); |
||||||
|
textArea.setText(detail); |
||||||
|
UIScrollPane scrollPane = new UIScrollPane(textArea); |
||||||
|
expandableContentPane.setLayout(new BorderLayout()); |
||||||
|
expandableContentPane.setBorder(BorderFactory.createEmptyBorder(0, MARGIN, 0, MARGIN)); |
||||||
|
expandableContentPane.add(scrollPane, BorderLayout.CENTER); |
||||||
|
changeExpand(isExpand); |
||||||
|
contentPanel.add(expandableContentPane, BorderLayout.CENTER); |
||||||
|
add(contentPanel, BorderLayout.CENTER); |
||||||
|
|
||||||
|
|
||||||
|
// 操作面板
|
||||||
|
JPanel actionPanel = new JPanel(); |
||||||
|
actionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, MARGIN, MARGIN)); |
||||||
|
actionPanel.add(buttonCancel); |
||||||
|
actionPanel.add(buttonOK); |
||||||
|
add(actionPanel, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
initListener(); |
||||||
|
if (l != null) { |
||||||
|
addDialogActionListener(l); |
||||||
|
} |
||||||
|
pack(); |
||||||
|
if (getOwner() != null) { |
||||||
|
GUICoreUtils.setWindowCenter(getOwner(), this); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void changeExpand(boolean isExpand) { |
||||||
|
if (isExpand) { |
||||||
|
expandableContentPane.setVisible(true); |
||||||
|
narrow.setIcon(UIManager.getIcon("OptionPane.narrow.down")); |
||||||
|
narrowHit.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); |
||||||
|
} else { |
||||||
|
expandableContentPane.setVisible(false); |
||||||
|
narrow.setIcon(UIManager.getIcon("OptionPane.narrow.right")); |
||||||
|
narrowHit.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void initListener() { |
||||||
|
|
||||||
|
foldBar.addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
changeExpand(!expandableContentPane.isShowing()); |
||||||
|
pack(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
foldBar.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
foldBar.setCursor(Cursor.getDefaultCursor()); |
||||||
|
} |
||||||
|
}); |
||||||
|
buttonOK.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
doOK(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
buttonCancel.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
doCancel(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected Icon getIconForType(int messageType) { |
||||||
|
if (messageType < 0 || messageType > 3) |
||||||
|
return null; |
||||||
|
String propertyName; |
||||||
|
switch (messageType) { |
||||||
|
case 0: |
||||||
|
propertyName = "OptionPane.errorIcon"; |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
default: |
||||||
|
propertyName = "OptionPane.informationIcon"; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
propertyName = "OptionPane.warningIcon"; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
propertyName = "OptionPane.questionIcon"; |
||||||
|
break; |
||||||
|
} |
||||||
|
return UIManager.getIcon(propertyName); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置对话框主消息 |
||||||
|
* |
||||||
|
* @param message 消息内容 |
||||||
|
*/ |
||||||
|
public void setMessage(String message) { |
||||||
|
msg.setText(HTML_TAG_1 + message + HTML_TAG_2); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置对话框消息详情 |
||||||
|
* |
||||||
|
* @param detail 消息详情 |
||||||
|
*/ |
||||||
|
public void setDetail(String detail) { |
||||||
|
textArea.setText(detail); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置详情面板展开关闭 |
||||||
|
* |
||||||
|
* @param expand 展开或关闭 |
||||||
|
*/ |
||||||
|
public void setExpand(boolean expand) { |
||||||
|
changeExpand(expand); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setVisible(boolean b) { |
||||||
|
super.setVisible(b); |
||||||
|
} |
||||||
|
|
||||||
|
public static Builder Builder() { |
||||||
|
return new UIExpandDialog.Builder(); |
||||||
|
} |
||||||
|
|
||||||
|
public static final class Builder { |
||||||
|
|
||||||
|
public int messageType = ERROR_MESSAGE; |
||||||
|
public String title; |
||||||
|
public String message; |
||||||
|
public String detail; |
||||||
|
public String okText = Toolkit.i18nText("Fine-Design_Report_OK"); |
||||||
|
public String cancelText = Toolkit.i18nText("Fine-Design_Basic_Cancel"); |
||||||
|
public boolean modal = true; |
||||||
|
public boolean expand = true; |
||||||
|
public Frame owner = null; |
||||||
|
public DialogActionListener dialogActionListener = null; |
||||||
|
|
||||||
|
private Builder() { |
||||||
|
} |
||||||
|
|
||||||
|
public UIExpandDialog build() { |
||||||
|
return new UIExpandDialog(this); |
||||||
|
} |
||||||
|
|
||||||
|
public Builder owner(Frame owner) { |
||||||
|
this.owner = owner; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder messageType(int messageType) { |
||||||
|
this.messageType = messageType; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder title(String title) { |
||||||
|
this.title = title; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder message(String message) { |
||||||
|
this.message = message; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder detail(String detail) { |
||||||
|
this.detail = detail; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder okText(String okText) { |
||||||
|
this.okText = okText; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder cancelText(String cancelText) { |
||||||
|
this.cancelText = cancelText; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder modal(boolean modal) { |
||||||
|
this.modal = modal; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder expand(boolean expand) { |
||||||
|
this.expand = expand; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder dialogActionListener(DialogActionListener dialogActionListener) { |
||||||
|
this.dialogActionListener = dialogActionListener; |
||||||
|
return this; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkValid() throws Exception { |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue