package view; import java.awt.*; import java.awt.event.*; import javax.swing.*; import GameIO.*; import java.util.*; /** * @dependency view.GameOverDialog instantiates */ public class TicTacToeFrame extends JFrame implements IView { private JPanel contentPane; private BorderLayout borderLayout1 = new BorderLayout(); private JPanel jPanel1 = new JPanel(); private JButton resetBtn = new JButton(); private JPanel jPanel2 = new JPanel(); private GridLayout gridLayout1 = new GridLayout(); private GridLayout gridLayout2 = new GridLayout(); private JPanel jPanel3 = new JPanel(); private ButtonGroup buttonGroup1 = new ButtonGroup(); private GridLayout gridLayout3 = new GridLayout(); private JButton startBtn = new JButton(); private JLabel jLabel1 = new JLabel(); private JButton[][] btnArray;// = new JButton[3] [3]; private String[] symbolStr = {"X", "0"}; /** * @supplierCardinality 1 */ private IModelAdmin modelAdmin; /** * @supplierCardinality 1 */ private IViewRequestor requestor; private JLabel statusLbl = new JLabel(); private JComboBox player1CBx = new JComboBox(); private JLabel jLabel2 = new JLabel(); private JComboBox player2CBx = new JComboBox(); private JPanel jPanel4 = new JPanel(); private JPanel jPanel5 = new JPanel(); private GridLayout gridLayout4 = new GridLayout(); private JLabel jLabel3 = new JLabel(); private JTextField addPlayerTF = new JTextField(); /** * @link dependency * @stereotype instantiate */ /*#GameOverDialog lnkGameOverDialog;*/ /** Construct the frame */ public TicTacToeFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch (Exception e) { e.printStackTrace(); } //Center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); this.setVisible(true); } public ICommand getCommand() { return new ICommand() { public void setTokenAt(int row, int col, int player) { btnArray[row] [col].setText(symbolStr[player]); statusLbl.setText(" "); } public void clearTokenAt(int row, int col) { btnArray[row] [col].setText(" "); } public void setMessage(String s) { statusLbl.setText(s); } }; } /** Component initialization */ private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage(TicTacToeFrame.class.getResource("[Your Icon]"))); contentPane = (JPanel)this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension(784, 403)); this.setTitle("Frame Title"); resetBtn.setEnabled(false); resetBtn.setText("Reset"); resetBtn.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { resetBtn_actionPerformed(e); } }); jPanel2.setLayout(gridLayout1); jPanel2.setBackground(Color.black); jPanel1.setLayout(gridLayout2); gridLayout2.setRows(-1); gridLayout2.setColumns(1); gridLayout2.setHgap(10); gridLayout2.setVgap(5); jPanel3.setLayout(gridLayout3); gridLayout3.setRows(-1); gridLayout3.setColumns(1); startBtn.setText("Start"); startBtn.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { startBtn_actionPerformed(e); } }); jLabel1.setText("Starting player (X):"); borderLayout1.setHgap(20); borderLayout1.setVgap(20); statusLbl.setPreferredSize(new Dimension(3, 20)); statusLbl.setText(" "); jLabel2.setText("Second player (O):"); jPanel4.setLayout(gridLayout4); gridLayout4.setRows(2); gridLayout4.setColumns(1); jLabel3.setText("Add player"); addPlayerTF.setPreferredSize(new Dimension(500, 21)); addPlayerTF.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { addPlayerTF_actionPerformed(e); } }); contentPane.add(jPanel1, BorderLayout.WEST); contentPane.add(jPanel5, BorderLayout.NORTH); jPanel5.add(jLabel3, null); jPanel5.add(addPlayerTF, null); jPanel1.add(jPanel4, null); jPanel4.add(resetBtn, null); jPanel4.add(startBtn, null); jPanel1.add(jPanel3, null); jPanel3.add(jLabel1, null); jPanel3.add(player1CBx, null); jPanel3.add(jLabel2, null); jPanel3.add(player2CBx, null); contentPane.add(jPanel2, BorderLayout.CENTER); contentPane.add(statusLbl, BorderLayout.SOUTH); } /** Overridden so we can exit when window is closed */ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { exit(); } } /** * Closes the frame and exits the model, returning to the controller. */ public void exit() { //System.exit(0); dispose(); modelAdmin.exit(); } /** * Resets the frame to its starting state. */ public void reset() { clearBtns(); enableBtns(false); resetBtn.setEnabled(false); startBtn.setEnabled(true); statusLbl.setText(""); } /** * Clears the text from all the buttons. */ void clearBtns() { for (int i = 0; i < btnArray.length; i++) { for (int j = 0; j < btnArray[i].length; j++) btnArray[i] [j].setText(""); } } /** * Enables the buttons so that the user can input a move. */ public void enableBtns(boolean state) { for (int i = 0; i < btnArray.length; i++) { for (int j = 0; j < btnArray[i].length; j++) btnArray[i] [j].setEnabled(state); } } /** * Resets the frame and the model. */ public void resetAll() { reset(); modelAdmin.reset(); } private void resetBtn_actionPerformed(ActionEvent e) { resetAll(); } public void setRequestor(IViewRequestor requestor) { this.requestor = requestor; } private void startBtn_actionPerformed(ActionEvent e) { modelAdmin.setPlayers(player1CBx.getSelectedItem(), player2CBx.getSelectedItem()); resetBtn.setEnabled(true); startBtn.setEnabled(false); enableBtns(true); } public void draw() { (new GameOverDialog(this)).draw(); } public void setModelAdmin(IModelAdmin modelAdmin) { this.modelAdmin = modelAdmin; setPlayers(modelAdmin.getPlayers()); } public void win(int player) { (new GameOverDialog(this)).playerWon("Player \""+ symbolStr[player]+"\""); } public void setPlayers(java.util.Vector players) { for(int i=0; i