项目设置

1#区域中使用JTree显示项目分组的数据。2#区域中使用JTable显示项目的数据。3#区域中显示输入项和按钮。
   private void build(){    
    
    JSplitPane jspan = new JSplitPane();
    jspan.setDividerLocation(200);
    jspan.setDividerSize(10);
    jspan.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
    jspan.setOneTouchExpandable( true);
    
    setLayout( new BorderLayout());
    add(jspan);
    
    MyTree myTree = new MyTree(MyTree.NOCHECK);
    jtree = myTree.getXmfzJTree();
    
    JScrollPane jscpan = new JScrollPane(jtree);
    
    jspan.setLeftComponent(jscpan);
    
    JPanel jpanRight = new JPanel( new BorderLayout());
    
    jspan.setRightComponent(jpanRight);

     // 创造JTable实例,JTable中的单元格不可编辑
    jt = new JTable();
    defaultModel = new DefaultTableModel( null, title){
       public boolean isCellEditable( int row, int column){
         return false;
      }        
    };
    jt.setAutoscrolls( true);
    jt.setModel(defaultModel);
    jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    
     // 隐藏JTable中的不显示的列
    SwingUtils.hideTableColumn(jt, 0);
    SwingUtils.hideTableColumn(jt, 1);
    
    JPanel xmszPanel = new JPanel( new BorderLayout());
    xmszPanel.setBorder(BorderFactory.createEtchedBorder());
    
     // 添加JTable实例的标题
    xmszPanel.add(jt.getTableHeader(), "North");
    
     // 添加JTable实例
    JScrollPane scrollPane = new JScrollPane(jt);
    xmszPanel.add(scrollPane, "Center");
    
    jpanRight.add(xmszPanel);
    
    JPanel editP = this.createOperatJPanel();
    editP.setBorder(BorderFactory.createEtchedBorder());
    
     // 添加操作区面板
    jpanRight.add(editP, "South");
    
         jtree.addMouseListener( new MouseListener(){    
                 public void mouseClicked(MouseEvent e) {    
                     int row = jtree.getRowForLocation(e.getX(), e.getY());    
                     if(row == -1) return;    
                     DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)jtree.getLastSelectedPathComponent();
                     TreeNodeObject tno = (TreeNodeObject)treeNode.getUserObject();    
                     if(e.getClickCount() == 1) {
                        jfzid.setText(tno.getNodeId());
                     } else if(e.getClickCount() == 2){
                        listXmszByFzid(tno.getNodeId());
                     }
                 }    
                 public void mouseEntered(MouseEvent e) {}    
                 public void mouseExited(MouseEvent e) {}    
                 public void mousePressed(MouseEvent e) {}    
                 public void mouseReleased(MouseEvent e) {}    
             });    
  }
(1)创造JSplitPane实例jspan,左边放JTree,右上边放JTable,右下边放JPanel。JTable分标题和表体两块,分别放在Layout为BorderLayout的JPanel的North和Center方向。
(2)创造JTree的实例jtree。使用MyTree的实例方法getXmfzJTree创建jtree。
(3)创造DefaultTableModel的实例,传入参数null和title,null表示JTable的数据为空,title是JTable的标题,在方法isCellEditable中返回false,表示单元格不可编辑。调用SwingUtils的类方法hideTableColumn隐藏JTable的第0列和第1列。调用setBorder方法设置JPanel的边框样式为BorderFactory.createEtchedBorder()。
(4)JTree的单击与双击事件。调用jtree.getRowForLocation(e.getX(), e.getY())检查是否选择上了JTree的一行。调用jtree.getLastSelectedPathComponent()返回选择的树节点。调用treeNode.getUserObject()获得与树节点关联的TreeNodeObject对象。调用e.getClickCount()检查鼠标点击次数是1还是2,如果是1,表示单击,执行语句jfzid.setText(tno.getNodeId()),如果是2,表示双击,执行语句listXmszByFzid(tno.getNodeId())列出项目设置数据在JTable。
   private JPanel createOperatJPanel() {
    
     // 将输入项组件添加到JPanel
    JPanel p1 = new JPanel( new FlowLayout(FlowLayout.LEFT));
    
    jfzid = new JTextField(20);
    p1.add(jfzid);
    jfzid.setVisible( false);
    
    jxmid = new JTextField(20);
    p1.add(jxmid);
    jxmid.setVisible( false);
    
    jxmzq = new Jxsgs( "xmzq", "项目周期");
    p1.add(jxmzq);
    
    jsjdw = new Jxsgs( "sjdw", "数据单位");
    p1.add(jsjdw);
    
     // 将输入项组件添加到JPanel
    JPanel p2 = new JPanel( new FlowLayout(FlowLayout.LEFT));
    
    p2.add( new JLabel( "项目名称"));
    jxmmc = new JTextField(30);
    p2.add(jxmmc);
    
    JPanel p4 = new JPanel( new FlowLayout(FlowLayout.LEFT));
    
    p4.add( new JLabel( "    小数位"));
    jxsw = new JTextField(30);
    p4.add(jxsw);
    
     // 将功能按钮新增、保存、删除添加到JPanel
    JPanel p3 = new JPanel( new FlowLayout(FlowLayout.LEFT));
    
    addBtn = new JButton( "新增");
    p3.add(addBtn);
    
    savBtn = new JButton( "保存");
    p3.add(savBtn);
    
    delBtn = new JButton( "删除");
    p3.add(delBtn);    
    
    xmzyBtn = new JButton( "项目转移");
    p3.add(xmzyBtn);
    
     // 按钮起初状态:增加可用、保存不可用、删除不可用
     this.setButtonState( true, false, false, false);
    
     // JTable实例点击事件处理
    jt.addMouseListener( new MouseAdapter(){
       public void mouseClicked(MouseEvent e) {
         int ind = jt.rowAtPoint(e.getPoint());
         if(ind == -1){ return;}
        Vector<String> v = (Vector<String>)defaultModel.getDataVector().get(ind);
        vector2Comp(v);
        setButtonState( true, true, true, true);
        setNew( false);
      }
    });    
    
     // 增加按钮点击事件处理
    addBtn.addActionListener( new ActionListener(){
       public void actionPerformed(ActionEvent e) {
        initEditItem();
        setButtonState( true, false, true, false);
        setNew( true);
        jt.clearSelection();
      }
    });
    
     // 删除按钮点击事件处理
    delBtn.addActionListener( new ActionListener(){
       public void actionPerformed(ActionEvent e) {
         int ind = jt.getSelectedRow();
         if(ind == -1){ return;}
         if(!SwingUtils.confirm( "确定要删除选择的数据?")){ return;}
        String xmid = jt.getModel().getValueAt(ind, 1).toString();
         // 判断项目下是否有数据
        String url1 = mainFrame.BASEURL + "xmsz2Action.do?method=getXmszDataNum&xmid=" + xmid;
        Integer num = (Integer)SwingUtils.request(url1);
         if(num!=0){
          SwingUtils.alert( "该项目已经有数据,无法删除!");
           return;
        }
         // 删除项目
        String url2 = mainFrame.BASEURL + "xmsz2Action.do?method=deleteXmsz&xmid=" + xmid;
        SwingUtils.request(url2, "");
        defaultModel.removeRow(ind);
        SwingUtils.fitTableColumns(jt);
        initEditItem();
        setButtonState( true, false, false, false);
        setNew( false);
        jt.clearSelection();
      }
    });

     // 保存按钮点击事件处理
    savBtn.addActionListener( new ActionListener(){
       public void actionPerformed(ActionEvent arg0) {
         if(!isValidate()){ return;}
         if(getNew()){
          Xmsz xmsz = comp2Xmsz();
          xmsz.setXmid( null);
          String url = mainFrame.BASEURL + "xmsz2Action.do?method=saveXmsz";
          xmsz = (Xmsz)SwingUtils.request(url, xmsz);
          defaultModel.addRow(xmsz2Array(xmsz));
          SwingUtils.fitTableColumns(jt);
        } else{
          Xmsz xmsz = comp2Xmsz();
          String url = mainFrame.BASEURL + "xmsz2Action.do?method=saveXmsz";
          xmsz = (Xmsz)SwingUtils.request(url, xmsz);
           int sr = jt.getSelectedRow();
          defaultModel.removeRow(sr);
          defaultModel.insertRow(sr, xmsz2Array(xmsz));
          SwingUtils.fitTableColumns(jt);
        }
        initEditItem();
        setButtonState( true, false, false, false);
        setNew( true);
        jt.clearSelection();
      }
    });
    
    xmzyBtn.addActionListener( new ActionListener(){
       public void actionPerformed(ActionEvent arg0) {
        List<TreeNodeObject> list = MyTree.openXmfzJDialog();
         long fzid = Long.valueOf(list.get(0).getNodeId());
        Xmsz xmsz = comp2Xmsz();
         if(fzid==xmsz.getFzid()){
          SwingUtils.alert( "项目转移成功。");
           return;
        }
        xmsz.setFzid(fzid);
        String url = mainFrame.BASEURL + "xmsz2Action.do?method=saveXmsz";
        SwingUtils.request(url, xmsz);
         int ind = jt.getSelectedRow();
        defaultModel.removeRow(ind);
        SwingUtils.alert( "项目转移成功。");
      }});

     // 将各面板添加到JPanel
    JPanel panel = new JPanel( new GridLayout(4, 1));
    panel.add(p1);
    panel.add(p2);
    panel.add(p4);
    panel.add(p3);
    
     return panel;
  }
(1)创造JPanel实例p1,设置Layout为FlowLayout。创造JTextField的实例jfzid和jxmid,是否可见为false,添加到p1,创造Jxsgs的实例jxmzq和jsjdw,添加到p1。
(2)创造JPanel实例p2,设置Layout为FlowLayout。创造JTextField实例jxmmc,添加到p2。
(3)创造JPanel实例p4,设置Layout为FlowLayout。创造JTextField实例jxsw,添加到p4。
(4)创造JPanel实例p3,设置Layout为FlowLayout。创造JButton实例addBtn、delBtn、savBtn和xmzyBtn,添加到p3。
(5)调用实例方法setButtonState设置JButton的初始状态。
(6)创造JTable的mouseClicked监听实例。调用jt.rowAtPoint(e.getPoint())获得行序号,将这一行的数据填充在Vector实例中,调用vector2Comp将Vector中的数据填充到界面的输入项中。设置JButton的状态,设置new标记为false。
(7)创造JButton addBtn的actionPerformed监听实例。调用initEditItem设置界面输入项为初始值。调用setButtonState设置JButton的状态。调用setNew设置new状态为true。调用jt.clearSelection()清空JTable的选择。
(8)创造JButton delBtn的actionPerformed监听实例。调用jt.getSelectedRow()获得JTable的选择的行序号,调用SwingUtils的类方法confirm确认删除,调用jt.getModel().getValueAt(ind, 1).toString()获得所选择JTable行的xmid,调用xmsz2Action的方法getXmszDataNum获得项目下存在的记录数,如果记录数不为0,那么不能删除这个项目,调用xmsz2Action的方法deleteXmsz删除掉项目。调用defaultModel的方法removeRow删除对应的行。调用SwingUtils的fitTableColumns方法重新调整JTable列的宽度。
(9)创造JButton savBtn的actionPerformed监听实例。调用isValidate检查界面上的输入项数据是否为空等有效性检查,调用getNew获取new的状态值,如果new为true,表示新增状态,如果new为false,表示修改状态。新增状态时,调用comp2Xmsz将界面上的输入项值创建一个Xmsz实例,设置xmid为null,调用xmsz2Action的方法saveXmsz保存Xmsz数据,返回xmid有值的Xmsz实例,调用xmsz2Array转换Xmsz对象为一个数组。调用defaultModel的方法addRow添加到JTable的最后一行。调用SwingUtils的方法fitTableColumns调整JTable列的宽度。修改状态时,不用设置xmid为null,调用removeRow方法将修改的那条记录从JTable中删除,调用方法insertRow将返回的记录插入到JTable中。
(10)创造JButton xmzyBtn的actionPerformed监听实例。调用MyTree的类方法openXmfzJDialog打开Xmfz对话框,调用list.get(0).getNodeId()从返回值的list中获得分组ID,调用comp2Xmsz使用界面上的输入项值创造一个Xmsz实例,如果界面上的fzid值与对话框中选择的分组ID值相同,那么就已经转移成功!如果不相同,那么就修改xmsz实例的分组ID值,调用jt.getSelectedRow()获得JTable的选择行,删除该行。

你可能感兴趣的:(职场,项目,休闲)