/* * * */ package com.vci.client.omd.versionrule.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.ScrollPaneConstants; import javax.swing.border.EmptyBorder; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.omd.vrm.VersionRule; import com.vci.client.omd.lifecycle.ui.LifeCycleWrapper; import com.vci.client.omd.ui.OmdTreeCellRenderer; import com.vci.client.omd.versionrule.VRClientStart; import com.vci.client.omd.versionrule.delegate.VersionRuleClientDelegate; import com.vci.client.omd.versionrule.itf.InterVer; import com.vci.client.omd.versionrule.pubimpl.InterVerManager; import com.vci.client.omd.versionrule.util.VersionRuleWrapper; import com.vci.client.omd.versionrule.util.XmlUtil; import com.vci.client.ui.util.PostorderEnumeration; import com.vci.corba.common.VCIError; import com.vci.mw.InvocationUtility; @SuppressWarnings("all") public class VersionRulePanel extends JPanel{ /** * */ private static final long serialVersionUID = 1L; String no1=null,no2=null,no3=null,no4=null,no5=null,no6=null,no7=null; private VersionRule versionRule = null; //定义文本框,用于用户输入数据 private JTextField jtf1=new JTextField(40), jtf2=new JTextField(40), jtf3=new JTextField(40), jtf4=new JTextField(40), jtf5=new JTextField(40), jtf6=new JTextField(40), jtf7=new JTextField(40); //定义标签,显示文本框的含义 private JLabel jl1 = new JLabel("名称"), jl2 = new JLabel("标签"), jl3 = new JLabel("跳跃字符"), jl4 = new JLabel("初始值"), jl5 = new JLabel("步长"), jl6 = new JLabel("前缀"), jl7 = new JLabel("后缀"), jl8 = new JLabel("描述"), jl11 = new JLabel("名称(不能为空)"), jl22 = new JLabel("标签(对名称的解释)"), jl33 = new JLabel("跳跃字符(以逗号分隔)"), jl44 = new JLabel("初始值(不能为空)"), jl55 = new JLabel("步长(不能为空)"), jl66 = new JLabel("前缀(可以为空)"), jl77 = new JLabel("后缀(可以为空)"), jl88 = new JLabel("描述(可以为空)"); private JTextField textField = new JTextField(); private JButton sel=new JButton("定位"); //定义文本域,用于书写描述信息 private JTextArea jta=new JTextArea(3,40); //定义容器,用于接收需要布局的容器 private JPanel jp; //定义主容器 private static VersionRulePanel attribpanel=null; //定义按钮 private JButton addButton = null,modifyButton = null,deleteButton = null,checkButton = null,saveButton = null, cancelButton = null; //定义小容器用于界面分区的时候使用 private JPanel northJPanel = null,westJPanel = new JPanel(),mainJPanel = null,centerJPanel = null, westTopJPanel=null,left=new JPanel(); //定义滚动条用于存放tree private JScrollPane scrollPane = new JScrollPane(); private JScrollPane west_scrollPane = new JScrollPane(); private JScrollPane main_scrollPane = new JScrollPane(); //定义一棵树 private JTree tree; private String nodeName=null,ssss="",associated=""; private int count=0; //定义构造器,首先要执行的方法在这里定义 private VersionRuleClientDelegate versionRuleClientDelegate = null; private boolean modifyFlag = false; private JButton btnExp; private JButton btnImp; public VersionRulePanel(){ createTree(); initUI(); saveButton.setEnabled(false); cancelButton.setEnabled(false); addListeneradd(); addListenermodify(); addListenerdelete(); addListenersave(); addListenercancel(); addListenner(); btnExp.addActionListener(new ExpActionListener()); btnImp.addActionListener(new ImpActionListener()); } //添加监听器这个监听器是取消按钮的,点击此按钮后界面将会被重置 private void addListenercancel() { cancelButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JOptionPane.showConfirmDialog(null, "您确定要执行取消操作吗?"); buttonManager(); buttonManager1(); mainJPanel.removeAll(); mainJPanel.updateUI(); } }); } //保存按钮的监听器,主要任务是讲数据存入XML文件,并且重置界面 private void addListenersave() { saveButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if((!jtf1.getText().equals(""))&&(!jtf3.getText().equals(""))&&(!jtf4.getText().equals(""))){ buttonManager(); String name = jtf1.getText(); if(!modifyFlag){ try { VersionRule vr = VRClientStart.getService().getVersionRule(name); if(!vr.name.equals("")){ JOptionPane.showMessageDialog(getThis(), "名称重复请更换名称!", "名称重复", JOptionPane.WARNING_MESSAGE); return; } VersionRule newVR = new VersionRule(); newVR.name = jtf1.getText(); newVR.tag = jtf7.getText(); newVR.jumpCharacter = jtf2.getText(); newVR.initialValue = jtf3.getText(); newVR.stepLength = jtf4.getText(); newVR.prefixion = jtf5.getText(); newVR.suffix = jtf6.getText(); newVR.description = jta.getText(); String userName = InvocationUtility.getInvocation().userName; newVR.creator = userName; newVR.modifier = userName; if(VRClientStart.getService().addVersionRule(newVR)){ JOptionPane.showMessageDialog(getThis(), "保存成功!", "保存成功", JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(getThis(), "保存失败!", "保存失败", JOptionPane.ERROR_MESSAGE); return; } } catch (VCIError e1) { e1.printStackTrace(); } }else{ VersionRule seletedVR = treeSelection(); if(seletedVR != null){ seletedVR.tag = jtf7.getText(); seletedVR.jumpCharacter = jtf2.getText(); seletedVR.initialValue = jtf3.getText(); seletedVR.stepLength = jtf4.getText(); seletedVR.prefixion = jtf5.getText(); seletedVR.suffix = jtf6.getText(); seletedVR.description = jta.getText(); String userName = InvocationUtility.getInvocation().userName; seletedVR.modifier = userName; try{ if(VRClientStart.getService().modifyVersionRule(seletedVR)){ JOptionPane.showMessageDialog(getThis(), "保存成功!", "保存成功", JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(getThis(), "保存失败!", "保存失败", JOptionPane.ERROR_MESSAGE); return; } } catch (VCIError e1) { e1.printStackTrace(); } }else{ JOptionPane.showMessageDialog(getThis(), "请选择版本规则!", "请选择版本规则", JOptionPane.ERROR_MESSAGE); return; } } createTree(); westJPanel.add(scrollPane,BorderLayout.CENTER); westJPanel.updateUI(); buttonManager1(); mainJPanel.removeAll(); mainJPanel.updateUI(); }else{ if((jtf1.getText().equals(""))||(jtf2.getText().equals(""))||(jtf4.getText().equals(""))){ JOptionPane.showMessageDialog(null,"请检查输入的数据,将数据补充完整!"); return; } } } }); } //修改按钮的监听器,主要任务是提示操作人员是否执行修改操作并且将修改后的数据存入XML文件和重置界面 private void addListenermodify(){ final Map map1 = new HashMap(); modifyButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JOptionPane.showConfirmDialog(null, "您确定要执行修改操作吗?"); if(mainJPanel == null){ return; } modifyFlag = true; VersionRule versionRule = treeSelection(); ArrayList interVerList = InterVerManager.getInstance().getInterVerList(); if(interVerList ==null || interVerList.size()==0){ jtf1.setEditable(true); }else { for(Iterator i = interVerList.iterator(); i.hasNext();){ InterVer interVer = (InterVer) i.next(); ArrayList usedNameList = interVer.getUsedNameList(versionRule.name); //add by caill start 2016.1.14 当版本被引用后,只能修改标签和描述;没被引用的版本除了名称外,都可以被修改 if(usedNameList!=null && usedNameList.size()>0){ jtf2.setEditable(false); jtf3.setEditable(false); jtf4.setEditable(false); jtf5.setEditable(false); jtf6.setEditable(false); }else { jtf2.setEditable(true); jtf3.setEditable(true); jtf4.setEditable(true); jtf5.setEditable(true); jtf6.setEditable(true); } } } jtf1.setEditable(false); jtf7.setEditable(true); jta.setEditable(true); //add by caill end addButton.setEnabled(false); modifyButton.setEnabled(false); deleteButton.setEnabled(false); checkButton.setEnabled(false); tree.setEnabled(false); mainJPanel.removeAll(); mainJPanel.add(addVersionrule1(versionRule),BorderLayout.CENTER); mainJPanel.updateUI(); saveButton.setEnabled(true); cancelButton.setEnabled(true); } }); } //删除按钮的监听器,主要任务是将要删除的项在XML文件中删除并且重置界面 private void addListenerdelete(){ deleteButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectedNode!=null && selectedNode.isLeaf()){ Object[] options = { "Yes", "No" }; int n = JOptionPane .showOptionDialog(getInstance(), "确认是否删除版本规则\"" + selectedNode.toString() + "\"", "版本规则删除", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); // int n = JOptionPane.showConfirmDialog(null, "您确定要执行删除操作吗?"); if(n != JOptionPane.YES_OPTION){ return; } nodeName=selectedNode.toString(); try { ArrayList interVerList = InterVerManager.getInstance().getInterVerList(); for(Iterator i = interVerList.iterator(); i.hasNext();){ InterVer interVer = (InterVer) i.next(); ArrayList usedNameList = interVer.getUsedNameList(nodeName); if(usedNameList!=null && usedNameList.size()>0){ JOptionPane.showMessageDialog(null,"该版本已被使用不允许删除"); return; } } VersionRule seletedVR = treeSelection(); if(seletedVR != null){ try{ if(VRClientStart.getService().deleteVersionRule(seletedVR)){ JOptionPane.showMessageDialog(getThis(), "删除成功!", "删除成功", JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(getThis(), "删除失败!", "删除失败", JOptionPane.ERROR_MESSAGE); return; } } catch (VCIError e1) { e1.printStackTrace(); } }else{ JOptionPane.showMessageDialog(getThis(), "请选择版本规则!", "请选择版本规则", JOptionPane.ERROR_MESSAGE); return; } } catch (Exception e) { e.printStackTrace(); } createTree(); scrollPane.setViewportView(tree); westJPanel.add(scrollPane,BorderLayout.CENTER); westJPanel.updateUI(); buttonManager(); buttonManager1(); mainJPanel.removeAll(); mainJPanel.updateUI(); createTree(); westJPanel.updateUI(); centerJPanel.updateUI(); }else{ JOptionPane.showMessageDialog(null,"请先选中要删除的项"); } } }); } public static void cleanInstance(){ attribpanel = null; } //此方法是一个静态方法,初始化的时候判断主容器是否存在,存在则继续执行,不存在则新建容器 public static VersionRulePanel getInstance(){ if(attribpanel == null){ attribpanel = new VersionRulePanel(); } return attribpanel; } //此方法主要是树节点被选择后要执行的操作,从XML文件中获取被选中项的数据并并且存入map集合中,让下面的方法使用 public VersionRule treeSelection(){ try { jtf1.setEditable(false); jtf2.setEditable(false); jtf3.setEditable(false); jtf4.setEditable(false); jtf5.setEditable(false); jtf6.setEditable(false); jtf7.setEditable(false); jta.setEditable(false); Document doc = null; DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if(node != null && node.getUserObject() instanceof VersionRuleWrapper){ VersionRuleWrapper vrWrapper = (VersionRuleWrapper)node.getUserObject(); return vrWrapper.getVR(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //这个方法是初始化并且为树添加监听器 public void createTree(){ DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("版本规则"); try { String versionrulename=""; VersionRule[] vrs = VRClientStart.getService().getVersionRules(); for(VersionRule vr : vrs){ DefaultMutableTreeNode node = new DefaultMutableTreeNode(new VersionRuleWrapper(vr)); node1.add(node); } } catch (Exception e) { e.printStackTrace(); } tree = new JTree(node1); tree.setCellRenderer(new OmdTreeCellRenderer()); scrollPane.setViewportView(tree); tree.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent mouseevent) { VersionRule versionRule = treeSelection(); westJPanel.removeAll(); westJPanel.add(scrollPane); westJPanel.updateUI(); mainJPanel.removeAll(); if(versionRule!=null){ mainJPanel.add(addVersionrule1(versionRule),BorderLayout.CENTER); } mainJPanel.updateUI(); } }); } //主界面的可视化方法,主要是定义界面的布局,不提供具体的功能 private void initUI() { setBackground(Color.WHITE); setLayout(new BorderLayout(0,0)); //northPanel northJPanel = new JPanel(); FlowLayout fl = (FlowLayout) northJPanel.getLayout(); fl.setAlignment(FlowLayout.CENTER); JScrollPane northJScrollPane = new JScrollPane(); northJScrollPane.setViewportView(northJPanel); this.add(northJPanel,BorderLayout.PAGE_START); addButton = new JButton("创建"); modifyButton = new JButton("修改"); deleteButton = new JButton("删除"); checkButton = new JButton("查看使用范围"); saveButton = new JButton("保存"); cancelButton = new JButton("取消"); btnExp = new JButton("导出"); btnImp = new JButton("导入"); northJPanel.add(addButton); northJPanel.add(modifyButton); northJPanel.add(deleteButton); northJPanel.add(checkButton); northJPanel.add(saveButton); northJPanel.add(cancelButton); northJPanel.add(btnExp); northJPanel.add(btnImp); //leftPanel centerJPanel = new JPanel(); // FlowLayout fl1 = (FlowLayout) centerJPanel.getLayout(); // fl1.setAlignment(FlowLayout.LEFT); centerJPanel.setLayout(new GridBagLayout()); westJPanel.setBorder(new EmptyBorder(5,5,0,5)); westJPanel.setAutoscrolls(true); GridBagConstraints gbc= new GridBagConstraints(); gbc.gridx=0; gbc.gridy=0; gbc.weightx=1.0; gbc.weighty=1.0; gbc.fill=GridBagConstraints.BOTH; //centerJPanel.add(westJPanel,gbc); centerJPanel.add(left,gbc); //westJPanel.setPreferredSize(new Dimension(centerJPanel.getSize().width/4,centerJPanel.getSize().height)); //add by caill start //搜索框的设置 GridBagConstraints gb = new GridBagConstraints(); gb.gridx = 0; gb.gridy = 0; gb.weightx = 0.7; gb.weighty = 0; gb.fill = GridBagConstraints.HORIZONTAL; westTopJPanel=new JPanel(); westTopJPanel.setLayout(new GridBagLayout()); westTopJPanel.add(textField,gb); westTopJPanel.add(sel); //为定位按钮增加点击事件 sel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //e.getSource(); String test = textField.getText().trim(); DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); model.reload(); TreeNode root = (TreeNode) model.getRoot(); PostorderEnumeration enumeration = new PostorderEnumeration( root); while (enumeration.hasMoreElements()) { DefaultMutableTreeNode element = (DefaultMutableTreeNode) enumeration .nextElement(); if (element.getUserObject() instanceof VersionRuleWrapper) { VersionRuleWrapper wrapper = (VersionRuleWrapper) element .getUserObject(); if (wrapper != null && wrapper.getVR() != null && wrapper.getVR().name.equals(test)) { TreeNode[] path = element.getPath(); TreePath treePath = new TreePath(path); tree.setSelectionPath(treePath); return; } ; } } if (test.equals("")) { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "请输入版本规则", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "{ " + test + " }版本规则不存在", "提示", JOptionPane.INFORMATION_MESSAGE); } } }); //为定位框添加事件 textField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JTextField text = (JTextField) e.getSource(); String test = text.getText().trim(); DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); model.reload(); TreeNode root = (TreeNode) model.getRoot(); PostorderEnumeration enumeration = new PostorderEnumeration( root); while (enumeration.hasMoreElements()) { DefaultMutableTreeNode element = (DefaultMutableTreeNode) enumeration .nextElement(); if (element.getUserObject() instanceof VersionRuleWrapper) { VersionRuleWrapper wrapper = (VersionRuleWrapper) element .getUserObject(); if (wrapper != null && wrapper.getVR() != null && wrapper.getVR().name.equals(test)) { TreeNode[] path = element.getPath(); TreePath treePath = new TreePath(path); tree.setSelectionPath(treePath); return; } ; } } if (test.equals("")) { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "请输入版本规则", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "{ " + test + " }版本规则不存在", "提示", JOptionPane.INFORMATION_MESSAGE); } } }); westJPanel.setLayout(new BorderLayout(5,5)); //westJPanel.add(westTopJPanel,BorderLayout.NORTH); westJPanel.add(scrollPane,BorderLayout.CENTER); //新增了left和westTopJPanel容器,将搜索框和定位按钮放入到westTopJPanel中,再将westTopJPanel和westJPanel放入到left中 left.setLayout(new BorderLayout(5,5)); left.add(westTopJPanel,BorderLayout.NORTH); left.add(westJPanel,BorderLayout.CENTER); //add by caill end //mainJPanel位于右侧 mainJPanel = new JPanel(); //mainJPanel.setPreferredSize(new Dimension(centerJPanel.getSize().width/5*4,centerJPanel.getSize().height)); gbc.gridx=1; gbc.weightx=4.0; JScrollPane mainsJScrollPane = new JScrollPane(); mainJPanel.setLayout(new BorderLayout(5,5)); mainsJScrollPane.setViewportView(mainJPanel); centerJPanel.add(mainsJScrollPane,gbc); JScrollPane scrollPane_center = new JScrollPane(); scrollPane_center.setViewportView(centerJPanel); // scrollPane_center.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); // scrollPane_center.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); this.add(scrollPane_center, BorderLayout.CENTER); } //为新建按钮添加监听器,新建结束后更新界面上需要更新的内容 private void addListeneradd() { addButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(mainJPanel == null){ return; } modifyFlag = false; jtf1.setEditable(true); jtf2.setEditable(true); jtf3.setEditable(true); jtf4.setEditable(true); jtf5.setEditable(true); jtf6.setEditable(true); jtf7.setEditable(true); jta.setEditable(true); addButton.setEnabled(false); modifyButton.setEnabled(false); deleteButton.setEnabled(false); checkButton.setEnabled(false); tree.setEnabled(false); mainJPanel.removeAll(); mainJPanel.add(addVerpanel(),BorderLayout.CENTER); mainJPanel.updateUI(); saveButton.setEnabled(true); cancelButton.setEnabled(true); } }); } public JPanel addVerpanel(){ jp = new JPanel(); jp.setBackground(Color.WHITE); jp.setLayout(new BorderLayout(0, 0)); jp.setBorder(BorderFactory.createTitledBorder(nodeName)); setBackground(Color.WHITE); setLayout(new BorderLayout(0, 0)); jp.setLayout(new GridBagLayout()); GridBagConstraints g = new GridBagConstraints(); //g.anchor = GridBagConstraints.EAST; g.insets = new Insets(15, 10, 5, 10); //add by caill 2016.1.14将控件间距拉大 g.gridx = 0; g.gridy = 0; g.anchor = GridBagConstraints.WEST; //add by caill 2016.1.14 将第一列控件设置为左对齐 jp.add(jl11, g); jtf1.setText(""); GridBagConstraints g1 = new GridBagConstraints(); g1.insets = new Insets(15, 10, 5, 10); //add by caill 2016.1.14将控件间距拉大 g1.gridx = 1; g1.gridy = 0; jtf1.updateUI(); jp.add(jtf1, g1); g.gridx = 0; g.gridy = 1; jp.add(jl22,g); g.gridx = 1; g.gridy = 1; jtf7.setText(""); //System.out.println(map.get(jl2.getText())); jp.add(jtf7,g); g.gridx = 0; g.gridy = 2; jp.add(jl33,g); g.gridx = 1; g.gridy = 2; jtf2.setText(""); jp.add(jtf2,g); g.gridx = 0; g.gridy = 3; jp.add(jl44,g); g.gridx = 1; g.gridy = 3; jtf3.setText(""); jp.add(jtf3,g); g.gridx = 0; g.gridy = 4; jp.add(jl55,g); g.gridx = 1; g.gridy = 4; jtf4.setText(""); jp.add(jtf4,g); g.gridx = 0; g.gridy = 5; jp.add(jl66,g); g.gridx = 1; g.gridy = 5; jtf5.setText(""); jp.add(jtf5,g); g.gridx = 0; g.gridy = 6; jp.add(jl77,g); g.gridx = 1; g.gridy = 6; jtf6.setText(""); jp.add(jtf6,g); g.gridx = 0; g.gridy = 7; jp.add(jl88, g); jta.setText(""); jta.setLineWrap(true); g1.gridx = 1; g1.gridy = 7; jp.add(new JScrollPane(jta),g1); //校验 jtf1.addFocusListener(new FocusListener() { String regex="[a-z A-Z]*"; public void focusLost(FocusEvent e) { if(jtf1.getText().equals("")||(!jtf1.getText().matches(regex))){ JOptionPane.showMessageDialog(null,jl11.getText().substring(0, 2)+"不能为空且只能为英文"); jtf1.setText(""); jtf1.requestDefaultFocus(); } } @Override public void focusGained(FocusEvent e) { } }); jtf2.addFocusListener(new FocusListener() { String regex = "[A-Za-z0-9]+$"; @Override public void focusLost(FocusEvent e) { if((!jtf2.getText().equals(""))&&(!(jtf2.getText().matches(regex)))){ JOptionPane.showMessageDialog(null,jl33.getText().substring(0, 4)+"只能为数字或者字母"); jtf2.requestDefaultFocus(); jtf2.setText(""); } } @Override public void focusGained(FocusEvent e) { // TODO Auto-generated method stub } }); jtf3.addFocusListener(new FocusListener() { String regex = "[A-Za-z0-9!@#$%^&*()-_=+{}':|;,.?/]+$"; @Override public void focusLost(FocusEvent e) { if(jtf3.getText().equals("")||(!(jtf3.getText().matches(regex)))){ JOptionPane.showMessageDialog(null,jl44.getText().substring(0, 3)+"不能为空且只能为数字或者字母或英文状态下的符号"); jtf3.setText(""); jtf3.requestDefaultFocus(); } } @Override public void focusGained(FocusEvent e) { } }); jtf3.setDocument(new PlainDocument(){ public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { String text = jtf1.getText(); if (text.length() + str.length() > 32) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(null, "初始值不能超过32个字符"); return; } super.insertString(offs, str, a); } }); jtf4.addFocusListener(new FocusListener() { String regex = "[1-9]"; @Override public void focusLost(FocusEvent e) { if(jtf4.getText().equals("")||(!jtf4.getText().matches(regex))){ JOptionPane.showMessageDialog(null,jl55.getText().substring(0, 2)+"不能为空且必须为1-9的正整数"); jtf4.setText(""); jtf4.requestDefaultFocus(); } } @Override public void focusGained(FocusEvent e) { } }); jtf5.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent focusevent) { String regex="^\\s+.*"; if((jtf5.getText().matches(regex))){ JOptionPane.showMessageDialog(null, "前缀不能以空格开头"); jtf5.setText(""); jtf5.requestDefaultFocus(); } } @Override public void focusGained(FocusEvent focusevent) { } }); jtf5.setDocument(new PlainDocument(){ public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { String text = jtf1.getText(); if (text.length() + str.length() > 32) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(null, "前缀不能超过32个字符"); return; } super.insertString(offs, str, a); } }); jtf6.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent focusevent) { String regex="^*.\\s+$"; if((jtf6.getText().matches(regex))){ JOptionPane.showMessageDialog(null, "后缀不能以空格结尾"); jtf6.setText(""); jtf6.requestDefaultFocus(); } } @Override public void focusGained(FocusEvent focusevent) { } }); jtf6.setDocument(new PlainDocument(){ public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { String text = jtf1.getText(); if (text.length() + str.length() > 32) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(null, "后缀不能超过32个字符"); return; } super.insertString(offs, str, a); } }); jta.setDocument(new PlainDocument(){ public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { String text = jta.getText(); if (text.length() + str.length() > 255) { Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(null, "名称不能超过255个字符"); return; } super.insertString(offs, str, a); } }); return jp; } //点击新建按钮后要显示的界面 // public JPanel addVerpanel(){ // flag = false; // jtf1.setText(""); // jtf7.setText(""); // jtf2.setText(""); // jtf3.setText(""); // jtf4.setText(""); // jtf5.setText(""); // jtf6.setText(""); // jta.setText(""); // JPanel jp = new JPanel(); // jp.setBackground(Color.WHITE); // jp.setLayout(new BorderLayout(0, 0)); // jp.setBorder(BorderFactory.createTitledBorder("创建版本号规则:")); // jp.setLayout(new GridBagLayout()); // GridBagConstraints g = new GridBagConstraints(); // g.anchor = GridBagConstraints.EAST; // g.insets = new Insets(10, 5, 0, 5); // g.gridx = 0; // g.gridy = 0; // jp.add(jl11, g); // GridBagConstraints g1 = new GridBagConstraints(); // g1.insets = new Insets(10, 5, 0, 5); // g1.gridx = 1; // g1.gridy = 0; // jp.add(jtf1, g1); // jtf1.addFocusListener(new FocusListener() { // String regex="[a-z A-Z]*"; // public void focusLost(FocusEvent e) { // if(jtf1.getText().equals("")||(!jtf1.getText().matches(regex))){ // JOptionPane.showMessageDialog(null,jl11.getText().substring(0, 2)+"不能为空且只能为英文"); // jtf1.setText(""); // jtf1.requestDefaultFocus(); // } // } // @Override // public void focusGained(FocusEvent e) { // // } // }); // // //限定文本框的有效输入长度为50 // jtf1.setDocument(new PlainDocument(){ // public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { // String text = jtf1.getText(); // if (text.length() + str.length() > 50) { // Toolkit.getDefaultToolkit().beep(); // JOptionPane.showMessageDialog(null, "名称不能超过50个字符"); // return; // } // super.insertString(offs, str, a); // } // }); // // g.gridx = 0; // g.gridy = 1; // jp.add(jl22,g); // g.gridx = 1; // g.gridy = 1; // jp.add(jtf7,g); // // g.gridx = 0; // g.gridy = 2; // jp.add(jl33,g); // g.gridx = 1; // g.gridy = 2; // jp.add(jtf2,g); // jtf2.addFocusListener(new FocusListener() { // String regex = "[A-Za-z0-9]+$"; // @Override // public void focusLost(FocusEvent e) { // if((!jtf2.getText().equals(""))&&(!(jtf2.getText().matches(regex)))){ // JOptionPane.showMessageDialog(null,jl33.getText().substring(0, 4)+"只能为数字或者字母"); // jtf2.requestDefaultFocus(); // jtf2.setText(""); // } // } // // @Override // public void focusGained(FocusEvent e) { // // TODO Auto-generated method stub // // } // }); // // g.gridx = 0; // g.gridy = 6; // jp.add(jl44,g); // g.gridx = 1; // g.gridy = 6; // jp.add(jtf3,g); // jtf3.addFocusListener(new FocusListener() { // String regex = "[A-Za-z0-9!@#$%^&*()-_=+{}':|;,.?/]+$"; // @Override // public void focusLost(FocusEvent e) { // if(jtf3.getText().equals("")||(!(jtf3.getText().matches(regex)))){ // JOptionPane.showMessageDialog(null,jl44.getText().substring(0, 3)+"不能为空且只能为数字或者字母或英文状态下的符号"); // jtf3.setText(""); // jtf3.requestDefaultFocus(); // } // } // // @Override // public void focusGained(FocusEvent e) { // // } // }); // // jtf3.setDocument(new PlainDocument(){ // public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { // String text = jtf1.getText(); // if (text.length() + str.length() > 32) { // Toolkit.getDefaultToolkit().beep(); // JOptionPane.showMessageDialog(null, "初始值不能超过32个字符"); // return; // } // super.insertString(offs, str, a); // } // }); // // g.gridx = 0; // g.gridy = 4; // jp.add(jl55,g); // g.gridx = 1; // g.gridy = 4; // jtf4.setText("1"); // jp.add(jtf4,g); // jtf4.addFocusListener(new FocusListener() { // String regex = "[1-9]"; // @Override // public void focusLost(FocusEvent e) { // if(jtf4.getText().equals("")||(!jtf4.getText().matches(regex))){ // JOptionPane.showMessageDialog(null,jl55.getText().substring(0, 2)+"不能为空且必须为1-9的正整数"); // jtf4.setText(""); // jtf4.requestDefaultFocus(); // } // } // @Override // public void focusGained(FocusEvent e) { // // } // }); // // g.gridx = 0; // g.gridy = 3; // jp.add(jl66,g); // g.gridx = 1; // g.gridy = 3; // jp.add(jtf5,g); // jtf5.addFocusListener(new FocusListener() { // @Override // public void focusLost(FocusEvent focusevent) { // String regex="^\\s+.*"; // if((jtf5.getText().matches(regex))){ // JOptionPane.showMessageDialog(null, "前缀不能以空格开头"); // jtf5.setText(""); // jtf5.requestDefaultFocus(); // } // } // // @Override // public void focusGained(FocusEvent focusevent) { // // } // }); // // jtf5.setDocument(new PlainDocument(){ // public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { // String text = jtf1.getText(); // if (text.length() + str.length() > 32) { // Toolkit.getDefaultToolkit().beep(); // JOptionPane.showMessageDialog(null, "前缀不能超过32个字符"); // return; // } // super.insertString(offs, str, a); // } // }); // // g.gridx = 0; // g.gridy = 5; // jp.add(jl77,g); // g.gridx = 1; // g.gridy = 5; // jp.add(jtf6,g); // jtf6.addFocusListener(new FocusListener() { // @Override // public void focusLost(FocusEvent focusevent) { // String regex="^*.\\s+$"; // if((jtf6.getText().matches(regex))){ // JOptionPane.showMessageDialog(null, "后缀不能以空格结尾"); // jtf6.setText(""); // jtf6.requestDefaultFocus(); // } // } // // @Override // public void focusGained(FocusEvent focusevent) { // // } // }); // // jtf6.setDocument(new PlainDocument(){ // public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { // String text = jtf1.getText(); // if (text.length() + str.length() > 32) { // Toolkit.getDefaultToolkit().beep(); // JOptionPane.showMessageDialog(null, "后缀不能超过32个字符"); // return; // } // super.insertString(offs, str, a); // } // }); // // g.gridx = 0; // g.gridy = 7; // jp.add(jl88, g); // jta.setLineWrap(true); // g1.gridx = 1; // g1.gridy = 7; // jp.add(new JScrollPane(jta),g1); // jta.setDocument(new PlainDocument(){ // public void insertString(int offs, String str,javax.swing.text.AttributeSet a) throws BadLocationException { // String text = jta.getText(); // if (text.length() + str.length() > 255) { // Toolkit.getDefaultToolkit().beep(); // JOptionPane.showMessageDialog(null, "名称不能超过255个字符"); // return; // } // super.insertString(offs, str, a); // } // }); // return jp; // } //点击树节点的时候要显示的界面,由于此界面与新建界面有区别所以没有用同一个界面 public JPanel addVersionrule1(VersionRule versionRule){ DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectedNode!=null){ nodeName = selectedNode.toString(); } jp = new JPanel(); jp.setBackground(Color.WHITE); jp.setLayout(new BorderLayout(0, 0)); jp.setBorder(BorderFactory.createTitledBorder(nodeName)); setBackground(Color.WHITE); setLayout(new BorderLayout(0, 0)); jp.setLayout(new GridBagLayout()); GridBagConstraints g = new GridBagConstraints(); //g.anchor = GridBagConstraints.EAST; g.anchor = GridBagConstraints.WEST;//add by caill 2015.1.14将第一列控件设置为左对齐 g.insets = new Insets(15, 10, 5, 10); g.gridx = 0; g.gridy = 0; jp.add(jl1, g); jtf1.setText(versionRule.name); GridBagConstraints g1 = new GridBagConstraints(); g1.insets = new Insets(15, 10, 5, 10); g1.gridx = 1; g1.gridy = 0; jtf1.updateUI(); jp.add(jtf1, g1); g.gridx = 0; g.gridy = 1; jp.add(jl2,g); g.gridx = 1; g.gridy = 1; jtf7.setText(versionRule.tag); //System.out.println(map.get(jl2.getText())); jp.add(jtf7,g); g.gridx = 0; g.gridy = 2; jp.add(jl3,g); g.gridx = 1; g.gridy = 2; jtf2.setText(versionRule.jumpCharacter); jp.add(jtf2,g); g.gridx = 0; g.gridy = 3; jp.add(jl4,g); g.gridx = 1; g.gridy = 3; jtf3.setText(versionRule.initialValue); jp.add(jtf3,g); g.gridx = 0; g.gridy = 4; jp.add(jl5,g); g.gridx = 1; g.gridy = 4; jtf4.setText(versionRule.stepLength); jp.add(jtf4,g); g.gridx = 0; g.gridy = 5; jp.add(jl6,g); g.gridx = 1; g.gridy = 5; jtf5.setText(versionRule.prefixion); jp.add(jtf5,g); g.gridx = 0; g.gridy = 6; jp.add(jl7,g); g.gridx = 1; g.gridy = 6; jtf6.setText(versionRule.suffix); jp.add(jtf6,g); g.gridx = 0; g.gridy = 7; jp.add(jl8, g); jta.setText(versionRule.description); jta.setLineWrap(true); g1.gridx = 1; g1.gridy = 7; jp.add(new JScrollPane(jta),g1); return jp; } //按钮管理,由于点击不同的按钮,按钮区各个按钮的显示状态不同,因此要对按钮状态进行设置 public void buttonManager(){ addButton.setEnabled(true); modifyButton.setEnabled(true); deleteButton.setEnabled(true); checkButton.setEnabled(true); tree.setEnabled(true); } //按钮管理,由于点击不同的按钮,按钮区各个按钮的显示状态不同,因此要对按钮状态进行设置 public void buttonManager1(){ saveButton.setEnabled(false); cancelButton.setEnabled(false); } //按钮管理,由于点击不同的按钮,按钮区各个按钮的显示状态不同,因此要对按钮状态进行设置 public void buttonManager2(){ addButton.setEnabled(false); modifyButton.setEnabled(false); deleteButton.setEnabled(false); checkButton.setEnabled(false); tree.setEnabled(false); saveButton.setEnabled(true); cancelButton.setEnabled(true); } /** * added by zhouhui */ private void addListenner(){ /** * 查看使用范围 */ checkButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(selectedNode == null){ JOptionPane.showMessageDialog(null, "请选中要查看的版本号", "无版本号", JOptionPane.WARNING_MESSAGE); return; } String name = selectedNode.toString(); if(name == null || name.equals("") || name.equals("版本号规则")){ JOptionPane.showMessageDialog(null, "请选中要查看的版本号", "无版本号", JOptionPane.WARNING_MESSAGE); return; } UsedToDialog usedToDialog = new UsedToDialog(name); usedToDialog.setVisible(true); } }); } public JPanel getThis(){ return this; } public List getSelectedVRs(){ TreePath[] selectionPaths = tree.getSelectionPaths(); //未选中, 返回 if(selectionPaths == null || selectionPaths.length == 0){ return null; } //选中根节点, 返回 if(selectionPaths.length == 1 && !(((DefaultMutableTreeNode)selectionPaths[0].getLastPathComponent()).getUserObject() instanceof VersionRuleWrapper)){ return null; } List list = new ArrayList(); for(TreePath path : selectionPaths){ DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); Object obj = node.getUserObject(); if(obj instanceof VersionRuleWrapper){ list.add(((VersionRuleWrapper)obj).getVR()); } } return list; } }