package senseiTests.domainsTest; import java.awt.FlowLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; class PhasePanel extends JPanel { public PhasePanel(String name) { super(new FlowLayout()); selector = new JPanel(new CardLayout()); add(selector); this.maxPhases=0; selector.add(createValidPanel(name),"1");//string not used selector.add(new JPanel(),"0"); disable(); } public void makeUnvisible() { ((CardLayout)(selector.getLayout())).last(selector); } /** * maxPhases is not displayed, is used just to limit the number of items to be shown. Use 0 for default * behaviour */ public void display(int phaseNumber) { int input=(phaseNumber<0)? 0 : (phaseNumber>=maxPhases)? maxPhases-1 : phaseNumber; SwingThreadedChanger.setSelectedIndex(phase,input); ((CardLayout)(selector.getLayout())).first(selector); } JPanel createValidPanel(String name) { phase = new JComboBox(); JPanel ret = new JPanel(); boxPhase = Box.createHorizontalBox(); boxPhase.add(new JLabel("number: ")); boxPhase.add(phase); ret.add(boxPhase); ret.setBorder(BorderFactory.createTitledBorder(name)); phase.setEnabled(false); setMaxPhases(MAXNUMPHASES); return ret; } /** * NumPhases must be in [1..MAXNUMPHASES], otherwise MAXNUMPHASES is assumed */ public void setMaxPhases(int numPhases) { int input = ((numPhases>0) && (numPhases<MAXNUMPHASES)? numPhases : MAXNUMPHASES); while(input>maxPhases) phase.addItem(numbers[maxPhases++]); while(input<maxPhases) phase.removeItem(numbers[--maxPhases]); } /** * Returns the current phase */ public int getPhase() { return phase.getSelectedIndex(); } JPanel selector; JComboBox phase; Box boxPhase; int maxPhases; static public final int MAXNUMPHASES=25; static final Integer[] numbers=new Integer[MAXNUMPHASES]; static { for(int i=0;i<MAXNUMPHASES;i++) numbers[i]=new Integer(i); } };