From 82985f1ff1dae9d643b31dffdfa560cb27bd13d0 Mon Sep 17 00:00:00 2001 From: xiongcz Date: Tue, 13 May 2025 15:56:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(dialog):=20=E4=BC=98=E5=8C=96=20Create?= =?UTF-8?q?TempDrawingDialog=20=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了未使用的导入语句和注释掉的代码 - 添加了打印 rMap 集合的 printRMap 方法 - 修改了 LOV 值获取和处理逻辑 - 优化了异常处理- 调整了组件初始化和事件处理的实现 --- .../dialogs/CreateTempDrawingDialog.class | Bin 32534 -> 33601 bytes .../dialogs/CreateTempDrawingDialog.java | 100 +++++----- .../utils/JTreeComboBox.java | 186 ++++++++++++++++++ 3 files changed, 240 insertions(+), 46 deletions(-) create mode 100644 src/cn/net/connor/createTempDrawings/utils/JTreeComboBox.java diff --git a/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class b/bin/cn/net/connor/createTempDrawings/dialogs/CreateTempDrawingDialog.class index 9733be639bd5ed6d0492ba872ad55cb0e3a2482d..afc5180559cbcb36d381c66b249ed81499ad78de 100644 GIT binary patch literal 33601 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%0DUM1(MMu9eJn=PJ~58!8<0?p zcabm;N1@k>bwI+X$QBRbPSRK*#lwccFQ-3lpcXuvx0xFP6g(LHM;YsJ{S-J!L#Dlgb~Tz*76nGjDiIfIgy*jn|)E^FO4 z8U(%XdQog#MYH&BkJuOu*`b7ZHX61A5s^rUZL2854%@+m*fF-2Msw+lZfS^1Uq)#^ zF8#SF?P-Ia_a?+^d&C>j6gy=vwXsvU-mg&4GPwF{;Hsf>WrXEKXb=QoN$|rk_?`uh zmkplRp8f%S>oe+3{|Djs1-A7|8bn`#GyjW<>1&!n-_RxaM8W0sJ+}1+aNQs24!CUZ z780NgnXQ=Vz{2MTYsE7FHf%N2c-x3r3vGUbJB2Zqig(ObbfK%nZ&4P&*bBt(a2Ler zlf>`EAAoFw=sfYR_#@_e1Eq^Ui9dsXGnY7>xx@vO!dybMGK``k>1Ja{>?F$mmbxE8 zQ^TB1EwmII6K&W@hks<8iBX~d1tTtN26K2H^!dTq9pXb=KN`mp&f(DMte`l;(LnfP z<_01f5YeEBhL|!Fq7Et&HdSvI2Y`yHwREzb>gqogyipNxkWnNJd!45Gn!U8_G@uB$ zemYk*O3tr*PW}mNO3cI^nvt}heONf6) zgSFI&-+pD@Mw+}0`LlSe*Jkmx9oQni=bO#qr-&4GaJy8BF34xi&kk&pAxtnL)0`Qi zsvX)(+4-h&x*c*VV`&U9*@6M)ElsvWOS2vs5d;BsgcZuKjyF6Q{{GmRfxc0|yJbSQjkd|P)A-ufZezD)Sc@MQrwhM}_S{8F z(?Li4+Lqr-uAP~XoujsG@AU#A6k0*(6w<#b}Ns$+-tXv$P>+m zw{dsV&bBRge;|4Ay1RLOI;)!z*%SI^w4L1!(~^17_STlJGu69PY)t5QMW?4Qtnzg%sOVvNK7GEgI%FgT?ZDF@~QS4krtL+wh#Lj5MjwEE2 zna4cL1LN&_Q7%|TCzvAeB~!FVE{L{fSYOH2ud1c-rXq{HVSL9T&%9s6@2{(+f@o{g z0Sv$MY!J{sF28|)ZmOl4Xq$#dyUhy?54ALjr-yC_@$@!ETRD3ak;|}25qT?i2^d%u zZJlSgcD5!QG|5F$otmM6pTAPBLr$f8WBv~8i3c7pbjFWOLl(UwjV?VyLW zrvah^zVz6U#z3nn#b;Y8L=Igcx*(P01iBt&w~7<#QPG`#4sGWx(GyxvE`1{M=v&bX z-^%HZuUzyM9q{p#lSO|qLY#(AeVmSuSezj)!Us}ji9&q&;w*6^zD}|p$9d{^W{`A5hs=|kh8@kxlBxvcZ#WUrMOUT6w~BpF86_WM;-y zwwQ_ZtXW7@oUL+2nJN^QsPn|7YPu*#mQsbfT2!i~VlL8OE>n++Dz!;etLH_HdO^%n zd&PY9Td_d>O5{qk*wvePD{H4U~w-0&~PufhzHI;7YL}ut;nS+#oguZWYf2mgD{|+^-VP2JXlG zI^3@p&jlVAn**D~mcTZV2)re>2L33v1wIzr1D}c=fzQOwz}I3|;3u&v7#1soS>orc zB#C#afYl6FNeTzky9cf~{ ztar-9v+_@F*-OZzXEn_dugF*B8sKxf_&_d_527qX9F+5oI+rQFlSAcNl(m#32g-H0 z%aWtFh`8I`I%(Pyu7?z7`Vihs1}DSK$!+PH9bwT{V}j;tFg#{7kv*P%=s| z>}0QXqiS$P}G z>*H-=pjDb=JGj;aQRhPdGrnU9^QL*=`at2KkJOJT=N-d8g7q}&tbQk**(dK1D6{3i z-8VzOSrXCM1hPaI**zk~?@BZ76cg+95f|sn5SK$PU4t1bB}OP&0{h7QPXg%J+^-KAP6cPBpVlwbPv0p^cf{EB-vM=XvHp&0?!0B7Y6t zmIDJ3`F4Y9s~dce7Xg<@{0hlBZ^1YCHg$oIAXmIYec%@u2#>%Zl%E41Kur9Ju7L+& z87%nK_{Pds@fUhoe1HQDAJV(xuW%H7L?591AnJV~4$wDHezL_U#y7DT-d^m5=bI31 zjTnMc5qIxEs34AlyWbi&krLUG{SX>Y-R1A)AK;tlLODk0g}}2i<+}(Igy9{�b#< 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 literal 32534 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 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