diff --git a/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class b/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class index 9733be6..afc5180 100644 Binary files a/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class and b/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class differ diff --git a/src/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.java b/src/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.java index d8c7c9b..9358147 100644 --- a/src/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.java +++ b/src/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.java @@ -43,12 +43,6 @@ import com.teamcenter.rac.util.PropertyLayout; import com.teamcenter.rac.util.UIUtilities; import com.teamcenter.schemas.soa._2006_03.exceptions.ServiceException; import com.teamcenter.services.rac.core.DataManagementService; -//导入类 -//import com.teamcenter.services.rac.core.DataManagementService; -//import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateIn; -//import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateInput; -//import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateOut; -//import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateResponse; import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateIn; import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateInput; import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateOut; @@ -108,7 +102,19 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ * @Value:存放lov的显示值-真实值集合 */ private static Map> rMap = new HashMap>(); - + + public static void printRMap() { + System.out.println("begin 打印rMap集合"); + for (Map.Entry> outerEntry : rMap.entrySet()) { + String key = outerEntry.getKey(); + Map innerMap = outerEntry.getValue(); + + System.out.println("Key: " + key); + for (Map.Entry innerEntry : innerMap.entrySet()) { + System.out.println(">>> Inner Key: " + innerEntry.getKey() + ", Value: " + innerEntry.getValue()); + } + } + } /** * 类构造函数 @@ -136,7 +142,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ } initUI(); } catch (Exception e) { - // TODO: handle exception e.printStackTrace(); } @@ -435,28 +440,10 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ if (!setFormProperty(itemRev,formList)) { System.out.println("表单属性设置失败!"); } -// itemRev.lock(); -// try { -// itemRev.setStringProperty("sb6_ifls", "是"); -// } catch (Exception e) { -// System.out.println("itemRev处理异常:"); -// e.printStackTrace(); -// }finally { -// itemRev.save(); -// itemRev.unlock(); -// } } else if (obj instanceof TCComponentForm) { form = (TCComponentForm) obj; - /* - * form.lock(); try { if (formList.size()>0) { System.out.println("开始处理表单数据"); - * for (String[] forms : formList) { if (forms.length == 3) { String tNameString - * = forms[0]; String tValueString = forms[1]; String tTypeString = forms[2]; - * - * setTCPropertyValue(form,tNameString,tValueString); } } } } catch (Exception - * e) { System.out.println("表单处理异常:"); e.printStackTrace(); }finally { - * form.save(); form.unlock(); } - */ + } } @@ -547,7 +534,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ form.unlock(); } } catch (TCException e) { - // TODO 自动生成的 catch 块 e.printStackTrace(); } @@ -611,7 +597,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ } } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } } @@ -674,7 +659,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { - // TODO 自动生成的方法存根 Object s = e.getSource(); try { if (s.equals(this.okButton)) { @@ -685,7 +669,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ try { buildDrawingObjTypeFrame(); } catch (Exception e2) { - // TODO: handle exception e2.printStackTrace(); } @@ -704,7 +687,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ try { createItem(); } catch (Exception e2) { - // TODO: handle exception e2.printStackTrace(); } @@ -715,7 +697,7 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ } catch (Exception e2) { - // TODO: handle exception + e2.printStackTrace(); } @@ -761,8 +743,17 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ return ((JTextField) component).getText(); } else if (component instanceof JComboBox) { System.out.println("JComboBox"); - JComboBox comboBox = (JComboBox) component; - return (String)comboBox.getSelectedItem(); + String returnValue = null; +// JComboBox comboBox = (JComboBox) component; +// return (String)comboBox.getSelectedItem(); + + JTreeComboBox treeComboBox = (JTreeComboBox ) component; + DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) treeComboBox.getSelectedItem(); + if (selectedNode != null) { + Object userObject = selectedNode.getUserObject(); + returnValue = userObject.toString(); + } + return returnValue; } else if (component instanceof DateButton) { System.out.println("DateButton"); DateButton dateButton = (DateButton) component; @@ -808,10 +799,10 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ this.idTextField = new JTextField(idValue); } this.revLabel = new JLabel("版本"); -// String[] revs = {"S01"};//版本下拉框数组 - //参考编码器获取新的版本 - String newRev = tccomponentitemtype.getNewRev(null); - String[] revs = {newRev}; + String[] revs = {"DX01"};//版本下拉框数组 +// //todo 参考编码器获取新的版本 +// String newRev = tccomponentitemtype.getNewRev(null); +// String[] revs = {newRev}; this.revComboBox = new JComboBox(revs); // this.revComboBox.setEditable(true); @@ -937,7 +928,7 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ centerPanel1.add(dateButton, gbcPropCombo); propComponentMap.put(validPropName, dateButton); } else if (typeValue.equals("lov")) { - //TODO 根据冒号后面的LOV名称获取多个lov值,封装成数组添加到propComboBox中 + // 根据冒号后面的LOV名称获取多个lov值,封装成数组添加到propComboBox中 if (lovName == null) { System.out.println("未获取到属性["+name+"]配置的lov名称,请检查配置!"); return null; @@ -945,6 +936,12 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ rMap.clear(); Map lovMap = getLOVDisplay_value(tcSession, lovName); + System.out.println("开始打印第一层lov:"); + for (String displayValue : lovMap.keySet()){ + System.out.println(" lovMap:"+displayValue+"--"+lovMap.get(displayValue)); + } + printRMap(); + String[] displayLovName = lovMap.keySet().toArray(new String[0]);//lov显示值 LovProperty lovProperty = new LovProperty();//自定义的lov类型的属性类 lovProperty.setPropName(name); @@ -955,8 +952,14 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ // JComboBox propComboBox = new JComboBox(displayLovName); DefaultMutableTreeNode root = generateLovTreeNode(lovMap,rMap); - JTreeComboBox propComboBox = new JTreeComboBox(root); - + JTreeComboBox propComboBox = null; + if(root != null) { + propComboBox = new JTreeComboBox(root); + }else { + System.out.println("绘制多层lov失败!"); + return null; + } + GridBagConstraints gbcPropCombo = new GridBagConstraints(); @@ -1099,16 +1102,16 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ * 获得TC LOV值的显示值-真实值集合 * @param seesion * @param lovProp lov名称 / 真实值 - * @return + * @return 第一层lov的<显示值-真实值>集合 * @throws TCException */ public static Map getLOVDisplay_value(TCSession seesion,String lovProp) throws TCException { + System.out.println("getLOVDisplay_value方法入参:lov名称="+lovProp); Map Display_values = new HashMap(); TCComponentListOfValues unitLov = TCLOVUtil.findLOVByName(seesion, lovProp); - if(unitLov != null) - { + if(unitLov != null){ String[] realval = unitLov.getListOfValues().getStringListOfValues(); String value=""; @@ -1120,8 +1123,13 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{ Map lovDisplay_value = getLOVDisplay_value(seesion, realval[i]); } + }else { + System.out.println("未找到LOV名称=["+lovProp+"]的lov对象!"); } - rMap.put(lovProp, Display_values); + if (!Display_values.isEmpty()){ + rMap.put(lovProp, Display_values); + } + return Display_values; } diff --git a/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java b/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java new file mode 100644 index 0000000..3e2e1cb --- /dev/null +++ b/src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java @@ -0,0 +1,186 @@ +package cn.net.connor.createTempDrawings.utils; + +import javax.swing.*; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.plaf.basic.BasicComboBoxUI; +import javax.swing.plaf.basic.BasicComboPopup; +import javax.swing.plaf.basic.ComboPopup; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import java.awt.*; +import java.awt.event.*; + +public class JTreeComboBox extends JComboBox { + private JTree tree; + private DefaultTreeModel treeModel; + private boolean suppressEvents = false; + + public JTreeComboBox(DefaultMutableTreeNode root) { + System.out.println("JTreeComboBox构造函数被调用,root是否为null: " + (root == null)); + + + // 初始化树模型 + treeModel = new DefaultTreeModel(root); + tree = new JTree(treeModel); + System.out.println("树对象已初始化: " + (tree != null)); + + // 设置自定义UI + setUI(new TreeComboBoxUI()); + System.out.println("自定义UI已设置"); + + // 设置树属性 + tree.setRootVisible(true); + tree.setShowsRootHandles(true); + tree.setCellRenderer(new TreeCellRenderer()); + + // 添加选择监听器 + tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { + @Override + public void valueChanged(TreeSelectionEvent e) { + if (!suppressEvents) { + DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); + if (selectedNode != null) { + setSelectedItem(selectedNode); + hidePopup(); + } + } + } + }); + + // 处理鼠标点击事件 + tree.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + TreePath path = tree.getPathForLocation(e.getX(), e.getY()); + if (path != null) { + tree.setSelectionPath(path); + DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); + if (node != null) { + if (tree.isExpanded(path)) { + tree.collapsePath(path); + } else { + tree.expandPath(path); + } + } + } + } + }); + + // 处理键盘事件 + tree.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_SPACE || e.getKeyCode() == KeyEvent.VK_ENTER) { + TreePath selectionPath = tree.getSelectionPath(); + if (selectionPath != null) { + DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent(); + if (selectedNode != null) { + setSelectedItem(selectedNode); + hidePopup(); + e.consume(); + } + } + } else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + hidePopup(); + e.consume(); + } + } + }); + + // 初始选择根节点 + setSelectedItem(root); + + System.out.println("JTreeComboBox初始化完成"); + } + + @Override + public void setSelectedItem(Object anObject) { + suppressEvents = true; + super.setSelectedItem(anObject); + suppressEvents = false; + + // 更新树的选择状态 + if (anObject instanceof DefaultMutableTreeNode) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) anObject; + TreePath path = new TreePath(node.getPath()); + tree.setSelectionPath(path); + } + } + + public JTree getTree() { + return tree; + } + + private class TreeComboBoxUI extends BasicComboBoxUI { + @Override + protected ComboPopup createPopup() { + System.out.println("创建弹出框,树对象是否为null: " + (tree == null)); + return new TreeComboPopup(comboBox, tree); + } + + @Override + protected ListCellRenderer createRenderer() { + return new ListCellRenderer() { + private final DefaultListCellRenderer renderer = new DefaultListCellRenderer(); + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + if (value instanceof DefaultMutableTreeNode) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + value = node.getUserObject(); + } + return renderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + } + }; + } + } + + private static class TreeComboPopup extends BasicComboPopup { + private JTree tree; + + public TreeComboPopup(JComboBox comboBox, JTree tree) { + super(comboBox); + this.tree = tree; + System.out.println("TreeComboPopup构造函数被调用,树对象是否为null: " + (tree == null)); + removeAll(); + setLayout(new BorderLayout()); + + // 添加滚动面板包含树 + JScrollPane scrollPane = new JScrollPane(tree); + scrollPane.setBorder(null); + add(scrollPane, BorderLayout.CENTER); + + // 设置弹出框大小 + Dimension preferredSize = tree.getPreferredSize(); + preferredSize.width = Math.max(preferredSize.width, comboBox.getWidth()); + preferredSize.height = Math.min(preferredSize.height, 200); + setPreferredSize(preferredSize); + } + + @Override + protected void configureList() { + // 不使用默认的列表 + } + + @Override + public void show() { + super.show(); + // 展开根节点 + tree.expandPath(new TreePath(((DefaultMutableTreeNode) tree.getModel().getRoot()).getPath())); + } + } + + private static class TreeCellRenderer extends DefaultTreeCellRenderer { + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { + if (value instanceof DefaultMutableTreeNode) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + value = node.getUserObject(); + } + return super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + } + } +} \ No newline at end of file