/* * Created on Feb 2, 2005 */ package towerHw3.tstarter; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import mvc373Hw3.ITowerController; import mvc373Hw3.ITowerModel; import mvc373Hw3.ITowerStarter; import mvc373Hw3.ITowerView; import towerHw3.tcontroller.TowerController; import towerHw3.tmodel.TowerModel; import towerHw3.tview.TowerView; /** This class provides a way to start the Homework #3 Towers of Hanoi * program. */ public class TowerStarter implements ITowerStarter { public static final String AUTHOR = "Martin D."; public static final String SHORT_DESCRIPTION = "A starter for the game"; public static final String LONG_DESCRIPTION = "Creates a window with the View on top, " + "then the Controller, " + "followed by a panel with a 'REFRESH' button " + "and the identity of the components"; /** Create the components and the Window to hold them, then * start the game. * @param args */ public static void main(String[] args) { ITowerModel tmodel = new TowerModel(); ITowerView tview = new TowerView(tmodel); ITowerController tcontroller = new TowerController(tmodel, tview); TowerFrame frame = new TowerFrame((JPanel) tcontroller, (JPanel) tview, tmodel); tcontroller.startUp(); //Ready to go } private static class TowerFrame extends JFrame { private final JPanel controlPanel; private final JPanel viewPanel; public static final int DEFAULT_WIDTH = 700; public static final int cpanelW = DEFAULT_WIDTH; public static final int cpanelH = 200; public static final int vpanelW = cpanelW; public static final int vpanelH = cpanelH - 10; public static final int spanelH = 75; public static final String DEFAULT_TITLE = "Towers of Hanoi Game"; TowerFrame(JPanel controlPanel, JPanel viewPanel, ITowerModel tmodel) { assert controlPanel != null; assert viewPanel != null; assert tmodel != null; this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle(DEFAULT_TITLE); Container contents = this.getContentPane(); contents.setLayout(new BoxLayout(contents, BoxLayout.Y_AXIS)); this.controlPanel = controlPanel; this.controlPanel.setBackground(new Color(240,240,190)); //light yellow this.controlPanel.setPreferredSize(new Dimension(cpanelW, cpanelH)); this.viewPanel = viewPanel; this.viewPanel.setBackground(new Color(200,255,200)); //light green this.viewPanel.setPreferredSize(new Dimension(vpanelW, vpanelH)); //Set up a little starter control panel JPanel starterPanel = new JPanel(); starterPanel.setBackground(Color.WHITE); //light green starterPanel.setPreferredSize(new Dimension(vpanelW, spanelH)); JButton manualRefresh = new JButton ("Manual Refresh"); manualRefresh.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { TowerFrame.this.viewPanel.repaint(); TowerFrame.this.controlPanel.repaint(); } }); starterPanel.add(manualRefresh); starterPanel.add(buildViewLabel((ITowerView) viewPanel)); starterPanel.add(buildModelLabel((ITowerModel) tmodel)); starterPanel.add(buildControllerLabel((ITowerController) controlPanel)); contents.add(viewPanel); contents.add(controlPanel); contents.add(starterPanel); this.pack(); this.show(); } JPanel getControlPanel() { assert this.controlPanel != null; return this.controlPanel; } JPanel getViewPanel() { assert this.viewPanel != null; return this.viewPanel; } JLabel buildModelLabel(ITowerModel tmodule) { TowerModel module = (TowerModel) tmodule; String lstring = "Model by " + module.AUTHOR + ":
" + module.LONG_DESCRIPTION; return new JLabel(lstring); } JLabel buildControllerLabel(ITowerController tmodule) { TowerController module = (TowerController) tmodule; String lstring = "Controller by " + module.AUTHOR + ":
" + module.SHORT_DESCRIPTION; return new JLabel(lstring); } JLabel buildViewLabel(ITowerView tmodule) { TowerView module = (TowerView) tmodule; String lstring = "View by " + module.AUTHOR + ":
" + module.SHORT_DESCRIPTION; return new JLabel(lstring); } } }