⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numberofcustomerspanel.java

📁 一个用于排队系统仿真的开源软件,有非常形象的图象仿真过程!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    if (!classes.contains(NCPA.getReferenceClass())) {
                        NCPA.setReferenceClass(classes.get(0));
                    }
                    classChooser.setSelectedItem(cd.getClassName(NCPA.getReferenceClass()));
                    int classPop = cd.getTotalCloseClassPopulation();
                    int minTo = classPop + 1;
                    ChangeListener cl = to.getChangeListeners()[0];
                    to.removeChangeListener(cl);
                    SpinnerNumberModel toModel = (SpinnerNumberModel)to.getModel();
                    toModel.setMinimum(new Integer(minTo));
                    to.addChangeListener(cl);
                    int oldStep = ((Integer)steps.getValue()).intValue();
                    int newMaximumStep = NCPA.searchForAvaibleSteps();
                    if (newMaximumStep > ParametricAnalysis.MAX_STEP_NUMBER) newMaximumStep = ParametricAnalysis.MAX_STEP_NUMBER;
                    SpinnerNumberModel stepModel = (SpinnerNumberModel)steps.getModel();
                    if (oldStep > newMaximumStep) {
                        NCPA.setNumberOfSteps(newMaximumStep);
                        steps.setValue(new Integer(newMaximumStep));
                    }
                    stepModel.setMaximum(new Integer(newMaximumStep));
                    description.setText(DESCRIPTION_SINGLE);
                    tablePanel.repaint();
                    tablePanel.setSelectedClass(NCPA.getReferenceClass());
                }
            }
        });
        allClass.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    NCPA.setSingleClass(false);
                    int classPop = cd.getTotalCloseClassPopulation();
                    int minTo;
                    if (cd.getClosedClassKeys().size() > 1) minTo = classPop*2 + 1;
                    else minTo = classPop + 1;
                    if (NCPA.getFinalValue() < minTo) NCPA.setFinalValue(minTo);
                    SpinnerNumberModel toModel = (SpinnerNumberModel)to.getModel();
                    toModel.setValue(new Integer((int)NCPA.getFinalValue()));
                    toModel.setMinimum(new Integer(minTo));
                    classChooser.removeAllItems();
                    classChooser.addItem("All closed classes");
                    classChooser.setEnabled(false);
                    int newMaximumStep = NCPA.searchForAvaibleSteps();
                    if (newMaximumStep > ParametricAnalysis.MAX_STEP_NUMBER) newMaximumStep = ParametricAnalysis.MAX_STEP_NUMBER;
                    int oldStep = ((Integer)steps.getValue()).intValue();
                    SpinnerNumberModel stepModel = (SpinnerNumberModel)steps.getModel();
                    if (oldStep > newMaximumStep) {
                        NCPA.setNumberOfSteps(newMaximumStep);
                        steps.setValue(new Integer(newMaximumStep));
                    }
                    stepModel.setMaximum(new Integer(newMaximumStep));
                    description.setText(DESCRIPTION);
                    tablePanel.repaint();
                    tablePanel.setSelectedClass(null);
                }
            }
        });
        to.addChangeListener(new ChangeListener() {
            public void stateChanged (ChangeEvent e) {
                if (to.getValue() instanceof Integer) {
                    Integer tValue = (Integer)to.getValue();
                    Integer sValue = (Integer)steps.getValue();
                    SpinnerNumberModel snm = (SpinnerNumberModel)steps.getModel();
                    int oldValue = (int)NCPA.getFinalValue();
                    NCPA.setFinalValue(tValue.intValue());
                    int newSteps = NCPA.searchForAvaibleSteps();
                    if (newSteps > ParametricAnalysis.MAX_STEP_NUMBER) newSteps = ParametricAnalysis.MAX_STEP_NUMBER;
                    if (newSteps >= 2) {
                        if (sValue.intValue() > newSteps) {
                            steps.setValue(new Integer(newSteps));
                            NCPA.setNumberOfSteps(newSteps);
                        }
                        snm.setMaximum(new Integer(newSteps));
                    }
                    else {
                        JOptionPane.showMessageDialog(to,"The inserted number of final jobs is too close to the initial one. The number of steps must be at least 2","JMT - Error",JOptionPane.ERROR_MESSAGE);
                        NCPA.setFinalValue(oldValue);          //set the old value
                    }
                }
            }
        });
        steps.addChangeListener(new ChangeListener() {
            public void stateChanged (ChangeEvent e) {
                if (steps.getValue() instanceof Integer) {
                    int sValue = ((Integer)steps.getValue()).intValue();
                    int sMax = ((Integer)((SpinnerNumberModel)steps.getModel()).getMaximum()).intValue();
                    int sMin = ((Integer)((SpinnerNumberModel)steps.getModel()).getMinimum()).intValue();
                    if ((sValue >= sMin)&&(sValue <= sMax)) {
                        NCPA.setNumberOfSteps(sValue);
                    }
                }
                steps.setValue(new Integer(NCPA.getNumberOfSteps()));
            }
        });
        classChooser.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                String className = (String)classChooser.getSelectedItem();
                Object classKey = null;
                Vector classes = cd.getClassKeys();
                //for cycle used to get the key of the selected class
                for (int i=0;i<classes.size();i++) {
                    if (cd.getClassName(classes.get(i)).equals(className)) {
                        classKey = classes.get(i);
                        break;
                    }
                }
                NCPA.setReferenceClass(classKey);
                int newMaximumStep = NCPA.searchForAvaibleSteps();
                if (newMaximumStep > ParametricAnalysis.MAX_STEP_NUMBER) newMaximumStep = ParametricAnalysis.MAX_STEP_NUMBER;
                int oldStep = ((Integer)steps.getValue()).intValue();
                SpinnerNumberModel stepModel = (SpinnerNumberModel)steps.getModel();
                if (oldStep > newMaximumStep) {
                    NCPA.setNumberOfSteps(newMaximumStep);
                    steps.setValue(new Integer(newMaximumStep));
                }
                stepModel.setMaximum(new Integer(newMaximumStep));
                tablePanel.repaint();
                tablePanel.setSelectedClass(NCPA.getReferenceClass());
            }
        });
    }

    protected class TablePanel extends JPanel {
        PopulationVectorTable table;
        JScrollPane jsp;
        JPanel globalPanel;
        JLabel title;
        JPanel titlePanel;

        public TablePanel() {
            table = new PopulationVectorTable();
            table.setAutoscrolls(true);
            jsp = new JScrollPane(table);
            jsp.setBorder(new EmptyBorder(10,10,10,10));
            jsp.setPreferredSize(new Dimension(202,92));
            title = new JLabel("<html><b>Population mix</b>");
            titlePanel = new JPanel(new FlowLayout());
            titlePanel.add(title);
            globalPanel = new JPanel(new BorderLayout());
            globalPanel.add(titlePanel,BorderLayout.NORTH);
            globalPanel.add(jsp,BorderLayout.CENTER);
            this.setLayout(new BorderLayout());
            this.add(globalPanel,BorderLayout.NORTH);
        }

        public void setSelectedClass(Object selectedClass) {
            int column = 0;
            Vector closedClasses = cd.getClosedClassKeys();
            if (NCPA.isSingleClass()) {
               for (int i=0;i<closedClasses.size();i++) {
                   if (closedClasses.get(i) == selectedClass) {
                       column = i;
                       break;
                   }
               }
            }
            double scrollMax = (double)jsp.getHorizontalScrollBar().getMaximum();
            double thisPos = (((double)column)/(double)closedClasses.size())*scrollMax;
            jsp.getHorizontalScrollBar().setValue((int)thisPos);
        }
    }

    /**
     * Inner class to show jobs composition
     */
    protected class PopulationVectorTable extends ExactTable {
       DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
       public PopulationVectorTable() {
           super(new PopulationVectorTableModel());
           autoResizeMode = AUTO_RESIZE_OFF;
           setRowSelectionAllowed(false);
           setColumnSelectionAllowed(false);
           setClipboardTransferEnabled(false);
           this.setRowHeaderWidth(40);
       }

       /**
        * The original getCellRenderer method is overwritten, since the table
        * displays in red the values of the selected class
        * @param row the row of the cell
        * @param column the column of the cell
        * @return a the TableCellRenderer for the requested cell (row,column)
        */
       public TableCellRenderer getCellRenderer(int row,int column) {
           dtcr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
           Component c;
           if (column < cd.getClosedClassKeys().size()) {
               Vector closedClasses = cd.getClosedClassKeys();
               Object thisClass = closedClasses.get(column);
               int thisPop = cd.getClassPopulation(thisClass).intValue();
               c = dtcr.getTableCellRendererComponent(this,Integer.toString(thisPop),false,false,row,column);
               if  (NCPA.isSingleClass()) {
                   if (thisClass == NCPA.getReferenceClass()) c.setForeground(Color.RED);
                   else c.setForeground(Color.BLACK);
               }
               else c.setForeground(Color.RED);
                }
           else {
               c = dtcr.getTableCellRendererComponent(this,"-",false,false,row,column);
               c.setForeground(Color.BLACK);
           }
           ((JLabel)c).setToolTipText(cd.getClassName(cd.getClosedClassKeys().get(column)));
           return dtcr;
       }
    }

    /**
     * Model for PopulationVectorTable
     * Columns represent the closed classes names.
     */
    protected class PopulationVectorTableModel extends ExactTableModel  {
        public PopulationVectorTableModel() {
            //prototype = "XXXX.XXX XXX";
            rowHeaderPrototype = "XXX";
        }

        public Object getPrototype(int i){
            if(i==-1) return rowHeaderPrototype;
            else {
                Vector classes = cd.getClosedClassKeys();
                int max = 0;
                int index = 0;
                for (int k=0; k<classes.size();k++) {
                    String name = cd.getClassName(classes.get(k));
                    int lenght = name.length();
                    if (lenght > max) {
                        max = lenght;
                        index = k;
                    }
                }
                prototype =  cd.getClassName(classes.get(index)) + "  ";
                return prototype;
            }
        }

        public int getRowCount() {
            return 2;
        }


        /**
         * @return the object at (rowIndex, columnIndex)
         */
        protected Object getValueAtImpl(int rowIndex, int columnIndex) {
            String toReturn;
            Object thisClass = cd.getClosedClassKeys().get(columnIndex);
            double thisPop = cd.getClassPopulation(thisClass).doubleValue();
            double totalPop = cd.getTotalCloseClassPopulation();
            if (rowIndex == 0) toReturn = Integer.toString((int)thisPop);
            else  {
                DecimalFormat twoDec = new DecimalFormat("0.00");
                double beta = thisPop/totalPop;
                toReturn = twoDec.format(beta);
            }
            return toReturn;
        }

        public int getColumnCount() {
            return cd.getClosedClassKeys().size();
        }



       /**
        * @return the header for row <code>rowIndex</code>
        */
        protected Object getRowName(int rowIndex) {
            if (rowIndex == 0) return "Ni";
            else return "遡" ;
        }

        /**
         * Gets the name of the column, given the column index
         * @param index the index of the column to give the name
         * @return the column name
         */
        public String getColumnName(int index) {
            Object thisClass = cd.getClosedClassKeys().get(index);
            return cd.getClassName(thisClass);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -