diff --git a/designer_base/src/com/fr/design/gui/frpane/RegPane.java b/designer_base/src/com/fr/design/gui/frpane/RegPane.java index 69df97135d..984665c8bd 100644 --- a/designer_base/src/com/fr/design/gui/frpane/RegPane.java +++ b/designer_base/src/com/fr/design/gui/frpane/RegPane.java @@ -16,6 +16,8 @@ import com.fr.general.Inter; import com.fr.stable.StringUtils; import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -53,9 +55,10 @@ public class RegPane extends BasicPane { private RegPhonePane regPhonePane; private DefaultRegPane defaultRegPane; private CustomRegRexPane customRegRexPane; + protected RegErrorMsgPane regErrorMsgPane; - public UIComboBox getRegComboBox() { + public UIComboBox getRegComboBox(){ return regComboBox; } @@ -68,25 +71,21 @@ public class RegPane extends BasicPane { this.initComponents(); } - private void initComponents() { - this.setLayout(new BorderLayout()); - + private void initComponents(){ + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel contentPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); + this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + this.add(contentPane, BorderLayout.NORTH); + contentPane.add(new UILabel(Inter.getLocText("FR-Designer_Input_Rule"))); regComboBox = new UIComboBox(regType); + regComboBox.setPreferredSize(new Dimension(140, 20)); regComboBox.setRenderer(listCellRender); + UILabel uiLabel = new UILabel(); + uiLabel.setPreferredSize(new Dimension(20, 20)); + contentPane.add(uiLabel); + contentPane.add(regComboBox); - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; - - Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Input_Rule") + " "), regComboBox}, - }; - double[] rowSize = {p}; - double[] columnSize = {p, f}; - int[][] rowCount = {{1, 1}}; - JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_LARGE); - panel.setBorder(BorderFactory.createEmptyBorder(8, 0, 0, 0)); - this.add(panel, BorderLayout.NORTH); - + regErrorMsgPane = new RegErrorMsgPane(); final JPanel cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); detailedCardLayout = new CardLayout(); cardPane.setLayout(detailedCardLayout); @@ -94,26 +93,35 @@ public class RegPane extends BasicPane { cardPane.add((regLengthPane = new RegLengthPane()), "Length"); cardPane.add((regPhonePane = new RegPhonePane()), "Phone"); cardPane.add((customRegRexPane = new CustomRegRexPane()), "Custom"); - cardPane.setBorder(BorderFactory.createEmptyBorder(8, 12, 0, 0)); this.add(cardPane, BorderLayout.CENTER); - regComboBox.addActionListener(new ActionListener() { + this.add(regErrorMsgPane, BorderLayout.SOUTH); + regComboBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { - RegExp regExp = (RegExp) regComboBox.getSelectedItem(); - if (regExp instanceof PhoneReg) { + RegExp regExp = (RegExp)regComboBox.getSelectedItem(); + if(regExp instanceof PhoneReg) { + cardPane.setPreferredSize(new Dimension(220, 30)); Object selectItem = regPhonePane.dataTypeComboBox.getSelectedItem(); String regString = selectItem == null ? StringUtils.EMPTY : selectItem.toString(); firePhoneRegAction(regString); detailedCardLayout.show(cardPane, "Phone"); } else { - if (regExp instanceof LengthReg) { + if (regExp instanceof LengthReg){ + cardPane.setPreferredSize(new Dimension(220, 60)); detailedCardLayout.show(cardPane, "Length"); - } else if (regExp instanceof CustomReg) { + } else if (regExp instanceof CustomReg){ + cardPane.setPreferredSize(new Dimension(220, 30)); detailedCardLayout.show(cardPane, "Custom"); } else { + cardPane.setPreferredSize(new Dimension(0,0 )); detailedCardLayout.show(cardPane, "Default"); } fireRegChangeAction(); } + if(regExp instanceof NoneReg){ + regErrorMsgPane.setVisible(false); + return; + } + regErrorMsgPane.setVisible(true); } }); } @@ -146,19 +154,21 @@ public class RegPane extends BasicPane { } else { defaultRegPane.populate(regex); } + regErrorMsgPane.populate(regex); } - public RegExp update() { - RegExp regExp = (RegExp) regComboBox.getSelectedItem(); - - if (regExp instanceof LengthReg) { + public RegExp update(){ + RegExp regExp = (RegExp)regComboBox.getSelectedItem(); + regErrorMsgPane.update(); + if (regExp instanceof LengthReg){ return regLengthPane.update(); - } else if (regExp instanceof PhoneReg) { + } else if(regExp instanceof PhoneReg) { return regPhonePane.update(); - } else if (regExp instanceof NoneReg || regExp instanceof MailReg || regExp instanceof IDCardReg + } else if(regExp instanceof NoneReg || regExp instanceof MailReg || regExp instanceof IDCardReg || regExp instanceof PostCardReg || regExp instanceof PhoneReg || regExp instanceof MobileReg) { return regExp; - } else if (regExp instanceof CustomReg) { + } + else if (regExp instanceof CustomReg){ if (customRegRexPane.isEmpty()) { return new NoneReg(); } @@ -177,7 +187,7 @@ public class RegPane extends BasicPane { private static class DefaultRegPane extends DisplayPane { public RegExp regRex; - public DefaultRegPane() { + public DefaultRegPane(){ } @@ -203,7 +213,10 @@ public class RegPane extends BasicPane { * 添加电话规则监听器 * * @param listener 监听器 + * + * * @date 2014-12-3-下午7:30:55 + * */ public void addPhoneRegListener(PhoneRegListener listener) { this.listenerList.add(PhoneRegListener.class, listener); @@ -213,7 +226,10 @@ public class RegPane extends BasicPane { * 移除电话规则监听器 * * @param listener 监听器 + * + * * @date 2014-12-3-下午7:30:55 + * */ public void removePhoneRegListener(PhoneRegListener listener) { this.listenerList.remove(PhoneRegListener.class, listener); @@ -223,7 +239,10 @@ public class RegPane extends BasicPane { * 添加正则监听器 * * @param listener 监听器 + * + * * @date 2014-12-3-下午7:29:48 + * */ public void addRegChangeListener(RegChangeListener listener) { this.listenerList.add(RegChangeListener.class, listener); @@ -233,7 +252,10 @@ public class RegPane extends BasicPane { * 移除正则监听器 * * @param listener 监听器 + * + * * @date 2014-12-3-下午7:29:48 + * */ public void removeRegChangeListener(RegChangeListener listener) { this.listenerList.remove(RegChangeListener.class, listener); @@ -241,45 +263,41 @@ public class RegPane extends BasicPane { public class PhoneRegEvent extends EventObject { private String phoneRegString; - public PhoneRegEvent(Object source, String phoneRegString) { super(source); this.setPhoneRegString(phoneRegString); } - public void setPhoneRegString(String phoneRegString) { this.phoneRegString = phoneRegString; } - public String getPhoneRegString() { return phoneRegString; } } - public class RegChangeEvent extends EventObject { private String regString; - public RegChangeEvent(Object source, String regString) { super(source); this.setRegString(regString); } - public void setRegString(String regString) { this.regString = regString; } - public String getRegString() { return regString; } } - public interface PhoneRegListener extends EventListener { + public interface PhoneRegListener extends EventListener{ /** * 电话规则变化监听 * * @param e 变化事件 + * + * * @date 2014-12-3-下午7:29:01 + * */ void phoneRegChangeAction(PhoneRegEvent e); @@ -290,29 +308,28 @@ public class RegPane extends BasicPane { /** * 正则表达规则变化监听 * + * * @date 2014-12-3-下午7:29:01 + * */ void regChangeAction(); } - protected void firePhoneRegAction(String phoneReg) { Object[] listeners = listenerList.getListenerList(); - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == PhoneRegListener.class) { - ((PhoneRegListener) listeners[i + 1]).phoneRegChangeAction(new PhoneRegEvent(this, phoneReg)); + for (int i = listeners.length-2; i>=0; i-=2) { + if (listeners[i]==PhoneRegListener.class) { + ((PhoneRegListener)listeners[i+1]).phoneRegChangeAction(new PhoneRegEvent(this , phoneReg)); } } } - protected void fireRegChangeAction() { Object[] listeners = listenerList.getListenerList(); - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == RegChangeListener.class) { - ((RegChangeListener) listeners[i + 1]).regChangeAction(); + for (int i = listeners.length-2; i>=0; i-=2) { + if (listeners[i]==RegChangeListener.class) { + ((RegChangeListener)listeners[i+1]).regChangeAction(); } } } - private class RegPhonePane extends DisplayPane { private static final String EMB_REG1 = "025-85679591"; private static final String EMB_REG2 = "02585679591"; @@ -322,19 +339,20 @@ public class RegPane extends BasicPane { private UIComboBox dataTypeComboBox; private final String[] dataType = {EMB_REG1, EMB_REG2, EMB_REG3, Inter.getLocText("FR-Designer_Custom")}; - DefaultComboBoxModel DefaultComboBoxModel = new DefaultComboBoxModel(dataType); - + DefaultComboBoxModel DefaultComboBoxModel= new DefaultComboBoxModel(dataType); public RegPhonePane() { - this.setLayout(FRGUIPaneFactory.createLabelFlowLayout()); - this.add(new UILabel(Inter.getLocText("FR-Designer_Data_Type") + ":")); + this.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 5)); + this.setLayout(FRGUIPaneFactory.createBorderLayout()); dataTypeComboBox = new UIComboBox(DefaultComboBoxModel); - JTextField editFiled = (JTextField) (dataTypeComboBox.getEditor().getEditorComponent()); + JTextField editFiled = (JTextField)(dataTypeComboBox.getEditor().getEditorComponent()); + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{new UILabel(Inter.getLocText("FR-Designer_Data_Type")), dataTypeComboBox}}, TableLayoutHelper.FILL_LASTCOLUMN, 18, 7); + this.add(panel); editFiled.setDocument(new LimitedDocument(LIMIT_LENGTH, REG_PATTERN)); dataTypeComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - if (ComparatorUtils.equals(e.getItem(), dataType[3])) { + if(e.getStateChange() == ItemEvent.SELECTED) { + if(ComparatorUtils.equals(e.getItem(), dataType[3])) { dataTypeComboBox.setSelectedItem(null); dataTypeComboBox.setEditable(true); firePhoneRegAction(EMB_REG1); @@ -347,9 +365,7 @@ public class RegPane extends BasicPane { }); dataTypeComboBox.setSelectedIndex(0); firePhoneRegAction(dataTypeComboBox.getSelectedItem().toString()); - this.add(dataTypeComboBox); } - @Override protected String title4PopupWindow() { return "PHONE"; @@ -357,17 +373,17 @@ public class RegPane extends BasicPane { @Override public void populate(RegExp regRex) { - if (!(regRex instanceof PhoneReg)) { - return; + if(!(regRex instanceof PhoneReg)) { + return ; } - String regstr = ((PhoneReg) regRex).getRegString(); - if (checkEmbedded(regstr)) { + String regstr = ((PhoneReg)regRex).getRegString(); + if (checkEmbedded(regstr)){ DefaultComboBoxModel.addElement(regstr); } - dataTypeComboBox.setSelectedItem(((PhoneReg) regRex).getRegString()); + dataTypeComboBox.setSelectedItem(((PhoneReg)regRex).getRegString()); } - private boolean checkEmbedded(String regstr) { + private boolean checkEmbedded(String regstr){ return !ComparatorUtils.equals(EMB_REG1, regstr) && !ComparatorUtils.equals(EMB_REG2, regstr) && !ComparatorUtils.equals(EMB_REG3, regstr); @@ -376,7 +392,7 @@ public class RegPane extends BasicPane { @Override public RegExp update() { PhoneReg regRex = new PhoneReg(); - regRex.setRegString((String) (dataTypeComboBox.getSelectedItem())); + regRex.setRegString((String)(dataTypeComboBox.getSelectedItem())); return regRex; } } @@ -385,22 +401,25 @@ public class RegPane extends BasicPane { private UISpinner minLenSpinner; private UISpinner maxLenSpinner; - public RegLengthPane() { - this.setLayout(new BorderLayout()); + public RegLengthPane(){ + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 5)); + this.setPreferredSize(new Dimension(210, 56)); minLenSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 0); maxLenSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 0); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Min_Length")), minLenSpinner}, - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Max_Length")), maxLenSpinner}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Min_Length") + ":"), minLenSpinner }, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Max_Length") + ":"), maxLenSpinner}, }; double[] rowSize = {p, p}; - double[] columnSize = {p, f}; - int[][] rowCount = {{1, 1}, {1, 1}}; - JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 8, 5); + double[] columnSize = {p,f}; + int[][] rowCount = {{1, 1},{1, 1}}; + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_SMALL, LayoutConstants.VGAP_MEDIUM); + this.add(panel); + - this.add(panel, BorderLayout.CENTER); } @Override @@ -410,20 +429,20 @@ public class RegPane extends BasicPane { @Override public void populate(RegExp regRex) { - if (!(regRex instanceof LengthReg)) { + if (!(regRex instanceof LengthReg)){ return; } - int minLength = ((LengthReg) regRex).getMinLen(); - int maxLength = ((LengthReg) regRex).getMaxLen(); + int minLength = ((LengthReg)regRex).getMinLen(); + int maxLength = ((LengthReg)regRex).getMaxLen(); minLenSpinner.setValue(minLength); maxLenSpinner.setValue(maxLength); } @Override public RegExp update() { - int startLength = ((Number) minLenSpinner.getValue()).intValue(); - int endLength = ((Number) maxLenSpinner.getValue()).intValue(); + int startLength = ((Number)minLenSpinner.getValue()).intValue(); + int endLength = ((Number)maxLenSpinner.getValue()).intValue(); LengthReg regRex = new LengthReg(); regRex.setMinLen(startLength); regRex.setMaxLen(endLength); @@ -432,22 +451,14 @@ public class RegPane extends BasicPane { } } - private static class CustomRegRexPane extends DisplayPane { + private static class CustomRegRexPane extends DisplayPane{ private UITextField regTextField; - public CustomRegRexPane() { - this.setLayout(new BorderLayout()); - regTextField = new UITextField(12); - - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; - Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Expressions")), regTextField}, - }; - double[] rowSize = {p}; - double[] columnSize = {p, f}; - int[][] rowCount = {{1, 1}}; - JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 2, 1); + public CustomRegRexPane(){ + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 5)); + regTextField = new UITextField(); + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{new UILabel(Inter.getLocText("FR-Designer_Reg_Expressions")), regTextField}}, TableLayoutHelper.FILL_LASTCOLUMN, 18, 7); this.add(panel); } @@ -458,7 +469,7 @@ public class RegPane extends BasicPane { @Override public void populate(RegExp regRex) { - if (!(regRex instanceof CustomReg)) { + if (!(regRex instanceof CustomReg)){ return; } regTextField.setText(regRex.toRegText()); @@ -474,26 +485,77 @@ public class RegPane extends BasicPane { } } - ListCellRenderer listCellRender = new UIComboBoxRenderer() { + private static class RegErrorMsgPane extends DisplayPane{ + private UITextField regErrorMsgField; + + public RegErrorMsgPane(){ + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setBorder(BorderFactory.createEmptyBorder(5,0,0,0)); + initRegErrorMsgField(); + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{new UILabel(Inter.getLocText("FR-Designer_Widget_Error_Tip")), regErrorMsgField}}, TableLayoutHelper.FILL_LASTCOLUMN, 18, 7); + this.add(panel); + } + + private void initRegErrorMsgField(){ + regErrorMsgField = new UITextField(); + regErrorMsgField.getDocument().addDocumentListener(new DocumentListener() { + public void changedUpdate(DocumentEvent e) { + regErrorMsgField.setToolTipText(regErrorMsgField.getText()); + } + + public void insertUpdate(DocumentEvent e) { + regErrorMsgField.setToolTipText(regErrorMsgField.getText()); + } + + public void removeUpdate(DocumentEvent e) { + regErrorMsgField.setToolTipText(regErrorMsgField.getText()); + } + }); + } + + @Override + protected String title4PopupWindow() { + return "CUSTOM"; + } + + @Override + public void populate(RegExp regRex) { + if (!(regRex instanceof CustomReg)){ + return; + } + regErrorMsgField.setText(regRex.toRegText()); + } + + @Override + public RegExp update() { + return new CustomReg(regErrorMsgField.getText()); + } + + public boolean isEmpty() { + return StringUtils.isEmpty(regErrorMsgField.getText()); + } + } + + ListCellRenderer listCellRender = new UIComboBoxRenderer(){ @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value instanceof NoneReg) { + if (value instanceof NoneReg){ this.setText(Inter.getLocText("FR-Designer_None")); - } else if (value instanceof LengthReg) { + } else if (value instanceof LengthReg){ this.setText(Inter.getLocText("FR-Designer_Length")); - } else if (value instanceof MailReg) { + } else if (value instanceof MailReg){ this.setText(Inter.getLocText("FR-Designer_Email")); - } else if (value instanceof PhoneReg) { + } else if (value instanceof PhoneReg){ this.setText(Inter.getLocText("FR-Designer_Phone")); } else if (value instanceof MobileReg) { this.setText(Inter.getLocText("FR-Designer_MobilePhone")); - } else if (value instanceof IDCardReg) { + } else if (value instanceof IDCardReg){ this.setText(Inter.getLocText("FR-Designer_IDCard")); - } else if (value instanceof PostCardReg) { + } else if (value instanceof PostCardReg){ this.setText(Inter.getLocText("FR-Designer_PostCode")); - } else if (value instanceof CustomReg) { + } else if (value instanceof CustomReg){ this.setText(Inter.getLocText("FR-Designer_Custom")); } return this;