package clueless.view;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
import javax.swing.SwingConstants;
/**
* View for displaying the clueless notebook to the user.
*
* @author T
*/
public class NotebookView extends AbstractView {
/**
* Singleton instance.
*/
private static NotebookView instance = null;
/**The main panel for the notebook view.
*/
private JPanel notebookPanel = null;
/**
* @return an instance of the Notebook view
*/
public static NotebookView getInstance(){
if(instance == null){
instance = new NotebookView();
}
return instance;
}
/**
* Private constructor for the singleton.
* Adds the empty UI components for the notebook view.
*/
private NotebookView(){
notebookPanel = new JPanel();
notebookPanel.setLayout(new BoxLayout(notebookPanel, BoxLayout.Y_AXIS));
// Header Labels
JLabel characterLabel = new JLabel("Suspects", SwingConstants.LEFT);
JLabel weaponLabel = new JLabel("Weapons", SwingConstants.LEFT);
JLabel roomLabel = new JLabel("Rooms", SwingConstants.LEFT);
// Weapons Labels
JLabel knifeLabel = new JLabel("Knife", SwingConstants.LEFT);
JLabel candlestickLabel = new JLabel("Candlestick", SwingConstants.LEFT);
JLabel revolverLabel = new JLabel("Revolver", SwingConstants.LEFT);
JLabel ropeLabel = new JLabel("Rope", SwingConstants.LEFT);
JLabel leadPipeLabel = new JLabel("Lead Pipe", SwingConstants.LEFT);
JLabel wrenchLabel = new JLabel("Wrench", SwingConstants.LEFT);
// Character labels
JLabel colMustardLabel = new JLabel("Col. Mustard", SwingConstants.LEFT);
JLabel profPlumLabel = new JLabel("Prof. Plum", SwingConstants.LEFT);
JLabel mrGreenLabel = new JLabel("Mr. Green", SwingConstants.LEFT);
JLabel mrsPeacockLabel = new JLabel("Mrs. Peacock", SwingConstants.LEFT);
JLabel missScarletLabel = new JLabel("Miss Scarlet", SwingConstants.LEFT);
JLabel mrsWhiteLabel = new JLabel("Mrs. White", SwingConstants.LEFT);
colMustardLabel.setBackground(Color.YELLOW);
profPlumLabel.setBackground(Color.MAGENTA);
mrGreenLabel.setBackground(Color.GREEN);
mrsPeacockLabel.setBackground(Color.BLUE);
missScarletLabel.setBackground(Color.RED);
mrsWhiteLabel.setBackground(Color.WHITE);
colMustardLabel.setOpaque(true);
profPlumLabel.setOpaque(true);
mrGreenLabel.setOpaque(true);
mrsPeacockLabel.setOpaque(true);
missScarletLabel.setOpaque(true);
mrsWhiteLabel.setOpaque(true);
// Room Labels
JLabel hallLabel = new JLabel("Hall", SwingConstants.LEFT);
JLabel loungeLabel = new JLabel("Lounge", SwingConstants.LEFT);
JLabel diningLabel = new JLabel("Dining Room", SwingConstants.LEFT);
JLabel kitchenLabel = new JLabel("Kitchen", SwingConstants.LEFT);
JLabel ballRmLabel = new JLabel("Ball Room", SwingConstants.LEFT);
JLabel conservLabel = new JLabel("Conservatory", SwingConstants.LEFT);
JLabel billiardLabel = new JLabel("Billiard Room", SwingConstants.LEFT);
JLabel libraryLabel = new JLabel("Library", SwingConstants.LEFT);
JLabel studyLabel = new JLabel("Study", SwingConstants.LEFT);
// Character Checkboxes
JCheckBox colMustardChkbox = new JCheckBox();
JCheckBox profPlumChkbox = new JCheckBox();
JCheckBox mrGreenChkbox = new JCheckBox();
JCheckBox mrsPeacockChkbox = new JCheckBox();
JCheckBox missScarletChkbox = new JCheckBox();
JCheckBox mrsWhiteChkbox = new JCheckBox();
// Weapon Checkboxes
JCheckBox knifeChkbox = new JCheckBox();
JCheckBox candlestickChkbox = new JCheckBox();
JCheckBox revolverChkbox = new JCheckBox();
JCheckBox ropeChkbox = new JCheckBox();
JCheckBox leadPipeChkbox = new JCheckBox();
JCheckBox wrenchChkbox = new JCheckBox();
// Room Checkboxes
JCheckBox hallChkbox = new JCheckBox();
JCheckBox loungeChkbox = new JCheckBox();
JCheckBox diningChkbox = new JCheckBox();
JCheckBox kitchenChkbox = new JCheckBox();
JCheckBox ballRmChkbox = new JCheckBox();
JCheckBox conservChkbox = new JCheckBox();
JCheckBox billiardChkbox = new JCheckBox();
JCheckBox libraryChkbox = new JCheckBox();
JCheckBox studyChkbox = new JCheckBox();
// Character Text Fields
JTextField colMustardTextField = new JTextField("", 13);
JTextField profPlumTextField = new JTextField("", 13);
JTextField mrGreenTextField = new JTextField("", 13);
JTextField mrsPeacockTextField = new JTextField("", 13);
JTextField missScarletTextField = new JTextField("", 13);
JTextField mrsWhiteTextField = new JTextField("", 13);
// Weapon Text Fields
JTextField knifeTextField = new JTextField("", 13);
JTextField candlestickTextField = new JTextField("", 13);
JTextField revolverTextField = new JTextField("", 13);
JTextField ropeTextField = new JTextField("", 13);
JTextField leadPipeTextField = new JTextField("", 13);
JTextField wrenchTextField = new JTextField("", 13);
// Room Text Fields
JTextField hallTextField = new JTextField("", 13);
JTextField loungeTextField = new JTextField("", 13);
JTextField diningTextField = new JTextField("", 13);
JTextField kitchenTextField = new JTextField("", 13);
JTextField ballRmTextField = new JTextField("", 13);
JTextField conservTextField = new JTextField("", 13);
JTextField billiardTextField = new JTextField("", 13);
JTextField libraryTextField = new JTextField("", 13);
JTextField studyTextField = new JTextField("", 13);
colMustardTextField.setMaximumSize(colMustardTextField.getPreferredSize());
profPlumTextField.setMaximumSize(profPlumTextField.getPreferredSize());
mrGreenTextField.setMaximumSize(mrGreenTextField.getPreferredSize());
mrsPeacockTextField.setMaximumSize(mrsPeacockTextField.getPreferredSize());
missScarletTextField.setMaximumSize(missScarletTextField.getPreferredSize());
mrsWhiteTextField.setMaximumSize(mrsWhiteTextField.getPreferredSize());
knifeTextField.setMaximumSize(knifeTextField.getPreferredSize());
candlestickTextField.setMaximumSize(candlestickTextField.getPreferredSize());
revolverTextField.setMaximumSize(revolverTextField.getPreferredSize());
ropeTextField.setMaximumSize(ropeTextField.getPreferredSize());
leadPipeTextField.setMaximumSize(leadPipeTextField.getPreferredSize());
wrenchTextField.setMaximumSize(wrenchTextField.getPreferredSize());
hallTextField.setMaximumSize(hallTextField.getPreferredSize());
loungeTextField.setMaximumSize(loungeTextField.getPreferredSize());
diningTextField.setMaximumSize(diningTextField.getPreferredSize());
kitchenTextField.setMaximumSize(kitchenTextField.getPreferredSize());
ballRmTextField.setMaximumSize(ballRmTextField.getPreferredSize());
conservTextField.setMaximumSize(conservTextField.getPreferredSize());
billiardTextField.setMaximumSize(billiardTextField.getPreferredSize());
libraryTextField.setMaximumSize(libraryTextField.getPreferredSize());
studyTextField.setMaximumSize(studyTextField.getPreferredSize());
// Section Panels
JPanel roomPanel = new JPanel();
JPanel characterPanel = new JPanel();
JPanel weaponPanel = new JPanel();
GroupLayout characterLayout = new GroupLayout(characterPanel);
characterLayout.setAutoCreateGaps(true);
characterLayout.setAutoCreateContainerGaps(true);
characterLayout.setHorizontalGroup(characterLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(characterLayout.createSequentialGroup()
.addComponent(colMustardLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(colMustardChkbox)
.addComponent(colMustardTextField)
)
.addGroup(characterLayout.createSequentialGroup()
.addComponent(profPlumLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(profPlumChkbox)
.addComponent(profPlumTextField))
.addGroup(characterLayout.createSequentialGroup()
.addComponent(mrGreenLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(mrGreenChkbox)
.addComponent(mrGreenTextField))
.addGroup(characterLayout.createSequentialGroup()
.addComponent(mrsPeacockLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(mrsPeacockChkbox)
.addComponent(mrsPeacockTextField))
.addGroup(characterLayout.createSequentialGroup()
.addComponent(missScarletLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(missScarletChkbox)
.addComponent(missScarletTextField))
.addGroup(characterLayout.createSequentialGroup()
.addComponent(mrsWhiteLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(mrsWhiteChkbox)
.addComponent(mrsWhiteTextField))
);
characterLayout.setVerticalGroup(characterLayout.createSequentialGroup()
.addGroup(characterLayout.createParallelGroup()
.addComponent(colMustardLabel)
.addComponent(colMustardChkbox)
.addComponent(colMustardTextField))
.addGroup(characterLayout.createParallelGroup()
.addComponent(profPlumLabel)
.addComponent(profPlumChkbox)
.addComponent(profPlumTextField))
.addGroup(characterLayout.createParallelGroup()
.addComponent(mrGreenLabel)
.addComponent(mrGreenChkbox)
.addComponent(mrGreenTextField))
.addGroup(characterLayout.createParallelGroup()
.addComponent(mrsPeacockLabel)
.addComponent(mrsPeacockChkbox)
.addComponent(mrsPeacockTextField))
.addGroup(characterLayout.createParallelGroup()
.addComponent(missScarletLabel)
.addComponent(missScarletChkbox)
.addComponent(missScarletTextField))
.addGroup(characterLayout.createParallelGroup()
.addComponent(mrsWhiteLabel)
.addComponent(mrsWhiteChkbox)
.addComponent(mrsWhiteTextField))
);
GroupLayout weaponLayout = new GroupLayout(weaponPanel);
weaponLayout.setAutoCreateGaps(true);
weaponLayout.setAutoCreateContainerGaps(true);
weaponLayout.setHorizontalGroup(weaponLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(knifeLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(knifeChkbox)
.addComponent(knifeTextField))
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(candlestickLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(candlestickChkbox)
.addComponent(candlestickTextField))
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(revolverLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(revolverChkbox)
.addComponent(revolverTextField))
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(ropeLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(ropeChkbox)
.addComponent(ropeTextField))
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(leadPipeLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(leadPipeChkbox)
.addComponent(leadPipeTextField))
.addGroup(weaponLayout.createSequentialGroup()
.addComponent(wrenchLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(wrenchChkbox)
.addComponent(wrenchTextField))
);
weaponLayout.setVerticalGroup(weaponLayout.createSequentialGroup()
.addGroup(weaponLayout.createParallelGroup()
.addComponent(knifeLabel)
.addComponent(knifeChkbox)
.addComponent(knifeTextField))
.addGroup(weaponLayout.createParallelGroup()
.addComponent(candlestickLabel)
.addComponent(candlestickChkbox)
.addComponent(candlestickTextField))
.addGroup(weaponLayout.createParallelGroup()
.addComponent(revolverLabel)
.addComponent(revolverChkbox)
.addComponent(revolverTextField))
.addGroup(weaponLayout.createParallelGroup()
.addComponent(ropeLabel)
.addComponent(ropeChkbox)
.addComponent(ropeTextField))
.addGroup(weaponLayout.createParallelGroup()
.addComponent(leadPipeLabel)
.addComponent(leadPipeChkbox)
.addComponent(leadPipeTextField))
.addGroup(weaponLayout.createParallelGroup()
.addComponent(wrenchLabel)
.addComponent(wrenchChkbox)
.addComponent(wrenchTextField))
);
GroupLayout roomLayout = new GroupLayout(roomPanel);
roomLayout.setAutoCreateGaps(true);
roomLayout.setAutoCreateContainerGaps(true);
roomLayout.setHorizontalGroup(roomLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(roomLayout.createSequentialGroup()
.addComponent(hallLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(hallChkbox)
.addComponent(hallTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(loungeLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(loungeChkbox)
.addComponent(loungeTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(diningLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(diningChkbox)
.addComponent(diningTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(kitchenLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(kitchenChkbox)
.addComponent(kitchenTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(ballRmLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(ballRmChkbox)
.addComponent(ballRmTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(conservLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(conservChkbox)
.addComponent(conservTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(billiardLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(billiardChkbox)
.addComponent(billiardTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(libraryLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(libraryChkbox)
.addComponent(libraryTextField))
.addGroup(roomLayout.createSequentialGroup()
.addComponent(studyLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(studyChkbox)
.addComponent(studyTextField))
);
roomLayout.setVerticalGroup(roomLayout.createSequentialGroup()
.addGroup(roomLayout.createParallelGroup()
.addComponent(hallLabel)
.addComponent(hallChkbox)
.addComponent(hallTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(loungeLabel)
.addComponent(loungeChkbox)
.addComponent(loungeTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(diningLabel)
.addComponent(diningChkbox)
.addComponent(diningTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(kitchenLabel)
.addComponent(kitchenChkbox)
.addComponent(kitchenTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(ballRmLabel)
.addComponent(ballRmChkbox)
.addComponent(ballRmTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(conservLabel)
.addComponent(conservChkbox)
.addComponent(conservTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(billiardLabel)
.addComponent(billiardChkbox)
.addComponent(billiardTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(libraryLabel)
.addComponent(libraryChkbox)
.addComponent(libraryTextField))
.addGroup(roomLayout.createParallelGroup()
.addComponent(studyLabel)
.addComponent(studyChkbox)
.addComponent(studyTextField))
);
characterPanel.setLayout(characterLayout);
weaponPanel.setLayout(weaponLayout);
roomPanel.setLayout(roomLayout);
roomPanel.setBackground(Color.LIGHT_GRAY);
characterPanel.setBackground(Color.LIGHT_GRAY);
weaponPanel.setBackground(Color.LIGHT_GRAY);
roomPanel.revalidate();
characterPanel.revalidate();
weaponPanel.revalidate();
notebookPanel.setBackground(Color.LIGHT_GRAY);
notebookPanel.add(characterLabel);
notebookPanel.add(characterPanel);
notebookPanel.add(weaponLabel);
notebookPanel.add(weaponPanel);
notebookPanel.add(roomLabel);
notebookPanel.add(roomPanel);
notebookPanel.setVisible(true);
}
/**
* @return a handle to the Notebook view. CAN be null.
*/
public JPanel getNotebookPanel(){
return this.notebookPanel;
}
}