📄 numberofcustomerspanel.java
字号:
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 + -