package view; import java.awt.BorderLayout; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import model.Referee; public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; private final Referee referee; public static void main(String[] args) { MainFrame mainFrame = new MainFrame(); mainFrame.playGame(); } public MainFrame() { super("CS8803 Project 4"); referee = new Referee(); init(); setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE); setVisible(true); pack(); } private void init() { ScorePanel sp = new ScorePanel(referee); TileSelectionPanel tp = new TileSelectionPanel(referee.getHumanPlayer()); BoardPanel bp = new BoardPanel(referee,tp); referee.setBoardPanel(bp); MessagePanel mp = new MessagePanel(referee); referee.setMessagePanel(mp); //The outer wrapper allows the game board to be resized vertically. JPanel vWrapper = new JPanel(); vWrapper.setLayout(new BoxLayout(vWrapper,BoxLayout.Y_AXIS)); //The inner wrappers allow each sub-panel to be independently resized horizontally. JPanel hWrapperTop = new JPanel(); hWrapperTop.setLayout(new BoxLayout(hWrapperTop,BoxLayout.X_AXIS)); JPanel hWrapperMid = new JPanel(); hWrapperMid.setLayout(new BoxLayout(hWrapperMid,BoxLayout.X_AXIS)); JPanel hWrapperBottom = new JPanel(); hWrapperBottom.setLayout(new BorderLayout()); //Top horizontal-box wrapper contains message panel, score panel hWrapperTop.add(Box.createHorizontalGlue()); hWrapperTop.add(mp); hWrapperTop.add(sp); hWrapperTop.add(Box.createHorizontalGlue()); //Mid horizontal box wrapper contains board panel hWrapperMid.add(Box.createHorizontalGlue()); JPanel bpContainer = new JPanel(); bpContainer.add(bp); hWrapperMid.add(bpContainer); hWrapperMid.add(Box.createHorizontalGlue()); //Bottom horizontal box wrapper contains tile panel hWrapperBottom.add(tp,BorderLayout.NORTH); //the outter wrapper contains the 3 inner wrappers: top, mid, bottom vWrapper.add(hWrapperTop); vWrapper.add(hWrapperMid); vWrapper.add(hWrapperBottom); //The main JFrame contains a the outer (vertical) wrapper, in the center of a BorderLayout. setLayout(new BorderLayout()); add(vWrapper,BorderLayout.CENTER); //To ensure correct size, pre-populate the score and message panels with text. sp.updateScore(); mp.updateMessage("Loading new game..."); pack(); //Finally, update the border to show the initially selected tile color. tp.updateBorders(); } private void playGame() { new Thread(referee).start(); } }