-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathItemMenu.java
More file actions
383 lines (347 loc) · 16.8 KB
/
ItemMenu.java
File metadata and controls
383 lines (347 loc) · 16.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
// Jason Jasper
// David Martin-Vaquero
// Jared Mclaren
// Regine Villongco
// Chemen Wong
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
/**
* IS 380 Final Project - Restaurant Point of Sale program.
* @author Jason Jasper, David Martin-Vaquero, Jared Mclaren, Regine Villongco, Chemen Wong
* @version 0.1.0
*
* This is the ItemMenu class. This class initializes a menu that will add items/orders to a table specified.
* The user presses the plus or minus buttons to increment/decrement item quantities. Once done, the user clicks
* the ADD button, and the items are added to the current table (order).
*
*/
public class ItemMenu extends JFrame {
private int tableNumber;
final private String[] menuItems = {"BLT", "Chicken Pot Pie", "10\" Pizza", "Pasta", "Soup of the Day", "Salad",
"Burger and Fries", "Bacon and Eggs"};
final private String[] beverageItems = {"Water", "Soda", "Coffee", "Tea", "Milk", "Juice"};
final private String[] menuIncrement = {"mIncrement0", "mIncrement1", "mIncrement2", "mIncrement3", "mIncrement4",
"mIncrement5", "mIncrement6", "mIncrement7"};
final private String[] menuDecrement = {"mDecrement0", "mDecrement1", "mDecrement2", "mDecrement3", "mDecrement4",
"mDecrement5", "mDecrement6", "mDecrement7"};
final private String[] beverageIncrement = {"bIncrement0", "bIncrement1", "bIncrement2", "bIncrement3", "bIncrement4",
"bIncrement5"};
final private String[] beverageDecrement = {"bDecrement0", "bDecrement1", "bDecrement2", "bDecrement3", "bDecrement4",
"bDecrement5"};
private JTextPane[] menuItemQuantity = new JTextPane[8];
private JTextPane[] beverageItemQuantity = new JTextPane[6];
/**
Constructor for item menu.
@param A table number.
*/
public ItemMenu(int tableNum) {
tableNumber = tableNum;
initComponents();
setTitle("Table "+tableNumber);
createItemPanels();
createBeveragePanels();
}
/**
Method for creating food item panels.
*/
private void createItemPanels() {
JPanel mainContainer = new JPanel();
for (int i=0; i<menuItems.length; i++) { //FOR EACH MENU ITEM IN THE ARRAY
//CREATE A JPANEL
JPanel itemContainer = new JPanel();
//CREATE AND SET A TITLED BORDER FOR EACH MENU ITEM
itemContainer.setBorder(BorderFactory.createTitledBorder(null, menuItems[i],
TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION,
new Font("Tahoma", Font.PLAIN, 14)));
//CREATE THE ITEM DECREMENT BUTTON, SET BUTTON FONT SIZE, AND BUTTON SIZE
//Todo: Add code that decrements count in Text Pane but not negative numbers
JButton decrementQuantity = new JButton("-");
decrementQuantity.setActionCommand(menuDecrement[i]);
decrementQuantity.addActionListener(new ButtonListener());
decrementQuantity.setFont(new Font("Tahoma", Font.PLAIN, 18));
decrementQuantity.setPreferredSize(new Dimension(50, 50));
//CREATE THE TEXT BOX TO HOLD ITEM QUANTITY, AND SET THE PREFERRED SIZE OF TEXT BOX
menuItemQuantity[i] = new JTextPane();
menuItemQuantity[i].setPreferredSize(new Dimension(30, 30));
//SET THE ALIGN CENTER, FONT SIZE, AND INITIALIZE THE QUANTITY TO ZERO
StyledDocument doc = menuItemQuantity[i].getStyledDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
menuItemQuantity[i].setFont(new Font("Tahoma", Font.PLAIN, 18));
menuItemQuantity[i].setText("0");
//CREATE THE ITEM INCREMENT BUTTON, SET BUTTON FONT SIZE, AND BUTTON SIZE
JButton incrementQuantity = new JButton("+");
incrementQuantity.setActionCommand(menuIncrement[i]);
incrementQuantity.addActionListener(new ButtonListener());
incrementQuantity.setPreferredSize(new Dimension(50, 50));
incrementQuantity.setFont(new Font("Tahoma", Font.PLAIN, 18));
//ADD ALL THE ITEMS TO THE ITEM CONTAINER
itemContainer.add(decrementQuantity);
itemContainer.add(menuItemQuantity[i]);
itemContainer.add(incrementQuantity);
mainContainer.add(itemContainer);
}
//ADD THE ITEM CONTAINERS TO THE MAIN CONTAINERS
foodPanel.add(mainContainer);
}
/**
Method for creating beverage item panels.
*/
private void createBeveragePanels() {
JPanel mainContainer = new JPanel();
for (int i=0; i<beverageItems.length; i++) { //FOR EACH MENU ITEM IN THE ARRAY
//CREATE A JPANEL
JPanel beverageContainer = new JPanel();
//CREATE AND SET A TITLED BORDER FOR EACH MENU ITEM
beverageContainer.setBorder(BorderFactory.createTitledBorder(null, beverageItems[i],
TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION,
new Font("Tahoma", Font.PLAIN, 14)));
//CREATE THE ITEM DECREMENT BUTTON, SET BUTTON FONT SIZE, AND BUTTON SIZE
JButton decrementQuantity = new JButton("-");
decrementQuantity.setActionCommand(beverageDecrement[i]);
decrementQuantity.addActionListener(new ButtonListener());
decrementQuantity.setFont(new Font("Tahoma", Font.PLAIN, 18));
decrementQuantity.setPreferredSize(new Dimension(50, 50));
//CREATE THE TEXT BOX TO HOLD ITEM QUANTITY, AND SET THE PREFERRED SIZE OF TEXT BOX
beverageItemQuantity[i] = new JTextPane();
beverageItemQuantity[i].setPreferredSize(new Dimension(30, 30));
//SET THE ALIGN CENTER, FONT SIZE, AND INITIALIZE THE QUANTITY TO ZERO
StyledDocument doc = beverageItemQuantity[i].getStyledDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
beverageItemQuantity[i].setFont(new Font("Tahoma", Font.PLAIN, 18));
beverageItemQuantity[i].setText("0");
//CREATE THE ITEM INCREMENT BUTTON, SET BUTTON FONT SIZE, AND BUTTON SIZEc
JButton incrementQuantity = new JButton("+");
incrementQuantity.setActionCommand(beverageIncrement[i]);
incrementQuantity.addActionListener(new ButtonListener());
incrementQuantity.setPreferredSize(new Dimension(50, 50));
incrementQuantity.setFont(new Font("Tahoma", Font.PLAIN, 18));
//ADD ALL THE ITEMS TO THE ITEM CONTAINER
beverageContainer.add(decrementQuantity);
beverageContainer.add(beverageItemQuantity[i]);
beverageContainer.add(incrementQuantity);
mainContainer.add(beverageContainer);
}
//ADD THE ITEM CONTAINERS TO THE MAIN CONTAINERS
beveragePanel.add(mainContainer);
}
// Private inner class for button actions.
private class ButtonListener implements ActionListener
{
/**
Override actionPerformed method.
@param ActionEvent object generated.
*/
public void actionPerformed(ActionEvent e)
{
for (int i=0; i<menuIncrement.length; i++) {
if (e.getActionCommand().equals(menuIncrement[i])) {
// Action for incrementing food item.
menuItemQuantity[i].setText(Integer.toString(Integer.parseInt(menuItemQuantity[i].getText()) + 1));
}
else if (e.getActionCommand().equals(menuDecrement[i])) {
if (Integer.parseInt(menuItemQuantity[i].getText()) > 0) {
// Action for decrementing food item.
menuItemQuantity[i].setText(Integer.toString(Integer.parseInt(menuItemQuantity[i].getText()) - 1));
}
}
}
for (int j=0; j<beverageIncrement.length; j++) {
if (e.getActionCommand().equals(beverageIncrement[j])) {
// Action for incrementing beverage item.
beverageItemQuantity[j].setText(Integer.toString(Integer.parseInt(beverageItemQuantity[j].getText()) + 1));
}
else if (e.getActionCommand().equals(beverageDecrement[j])) {
if (Integer.parseInt(beverageItemQuantity[j].getText()) > 0)
{
// Action for decrementing beverage item.
beverageItemQuantity[j].setText(Integer.toString(Integer.parseInt(beverageItemQuantity[j].getText()) - 1));
}
}
}
}
}
/**
Method for cancel button's action.
@param ActionEvent object generated.
*/
private void cancelButtonActionPerformed(ActionEvent e) {
this.dispose();
}
/**
Method for add button's action.
@param ActionEvent object generated.
*/
private void addButtonActionPerformed(ActionEvent e) {
//Todo: Add code to check if ANYTHING has been added to the order. if not, then skip this..
if (RestaurantPOS.isTableAvailable(tableNumber)) {
// Action to add order to an empty table.
System.out.println("Table " + tableNumber + " has no order. Starting new order...");
RestaurantPOS.tableArray[tableNumber - 1].startNewOrder(tableNumber);
int[] foodItemArray = tallyFoodItems();
int[] beverageItemArray = tallyBeverageItems();
for (int j=0; j<menuItems.length; j++) {
if (foodItemArray[j] > 0) { //If this particular item is added
RestaurantPOS.tableArray[tableNumber - 1].addFoodItemsToOrder(j, foodItemArray[j]); //For each Item, add a new item with that quantity
}
}
for (int i=0; i<beverageItems.length; i++) {
if (beverageItemArray[i] > 0) { //If this particular item is added
RestaurantPOS.tableArray[tableNumber - 1].addBeverageItemsToOrder(i, beverageItemArray[i]); //For each Item, add a new item with that quantity
}
}
} else {
// Action to add order to a table that has a previous order.
System.out.println("Table " + tableNumber + " has an order, adding to order");
int[] foodItemArray = tallyFoodItems();
int[] beverageItemArray = tallyBeverageItems();
for (int j=0; j<menuItems.length; j++) {
if (foodItemArray[j] > 0) { //If this particular item is added
RestaurantPOS.tableArray[tableNumber - 1].addFoodItemsToOrder(j, foodItemArray[j]); //For each Item, add a new item with that quantity
}
}
for (int i=0; i<beverageItems.length; i++) {
if (beverageItemArray[i] > 0) { //If this particular item is added
RestaurantPOS.tableArray[tableNumber - 1].addBeverageItemsToOrder(i, beverageItemArray[i]); //For each Item, add a new item with that quantity
}
}
}
this.dispose(); //Close window after adding.
}
/**
Method for keeping a count of food items.
*/
private int[] tallyFoodItems() {
int[] foodItemCount = new int[menuItems.length];
for (int i=0; i<menuItems.length; i++) {
// Total all food item text boxes.
try {
foodItemCount[i] = Integer.parseInt(menuItemQuantity[i].getText());
}
catch (Exception e) {
// Catch invalid text boxes.
System.out.println("Dont type things in the item quantity boxes.");
menuItemQuantity[i].setText("0"); //Over ride whatever they typed in the box to 0;
}
}
return foodItemCount;
}
/**
Method for keeping a count of beverage items.
*/
private int[] tallyBeverageItems() {
int[] beverageItemCount = new int[beverageItems.length];
for (int i=0; i<beverageItems.length; i++) {
// Total all beverage item text boxes.
try {
beverageItemCount[i] = Integer.parseInt(beverageItemQuantity[i].getText());
}
catch (Exception e) { //If unable to parse an integer, it means they typed into the box somehow.
// Catch invalid text boxes.
System.out.println("Dont type things in the item quantity boxes!!");
beverageItemQuantity[i].setText("0"); //Over ride whatever they typed in the box to 0;
}
}
return beverageItemCount;
}
/**
Method for creating panes and buttons.
*/
private void initComponents() {
tabbedPane1 = new JTabbedPane();
foodPanel = new JPanel();
itemPanel = new JPanel();
actionPanel = new JPanel();
addButton = new JButton();
cancelButton = new JButton();
beveragePanel = new JPanel();
beverageItemPanel = new JPanel();
beverageActionPanel = new JPanel();
addButton2 = new JButton();
cancelButton2 = new JButton();
//======== this ========
setTitle("Table");
var contentPane = getContentPane();
contentPane.setLayout(new GridLayout());
//======== tabbedPane1 ========
{
tabbedPane1.setFont(new Font("Tahoma", Font.PLAIN, 36));
//======== foodPanel ========
{
foodPanel.setLayout(new BorderLayout());
//======== itemPanel ========
{
itemPanel.setLayout(new GridLayout());
}
foodPanel.add(itemPanel, BorderLayout.CENTER);
//======== actionPanel ========
{
actionPanel.setLayout(new GridLayout());
//---- addButton ----
addButton.setText("ADD");
addButton.setPreferredSize(new Dimension(55, 60));
addButton.setFont(new Font("Tahoma", Font.BOLD, 18));
addButton.addActionListener(e -> addButtonActionPerformed(e));
actionPanel.add(addButton);
//---- cancelButton ----
cancelButton.setText("Cancel");
cancelButton.setPreferredSize(new Dimension(63, 60));
cancelButton.setFont(new Font("Tahoma", Font.BOLD, 18));
cancelButton.addActionListener(e -> cancelButtonActionPerformed(e));
actionPanel.add(cancelButton);
}
foodPanel.add(actionPanel, BorderLayout.SOUTH);
}
tabbedPane1.addTab("Food", foodPanel);
//======== beveragePanel ========
{
beveragePanel.setLayout(new BorderLayout());
//======== beverageItemPanel ========
{
beverageItemPanel.setLayout(new GridLayout());
}
beveragePanel.add(beverageItemPanel, BorderLayout.CENTER);
//======== beverageActionPanel ========
{
beverageActionPanel.setLayout(new GridLayout());
//---- addButton2 ----
addButton2.setText("ADD");
addButton2.setPreferredSize(new Dimension(55, 60));
addButton2.setFont(new Font("Tahoma", Font.BOLD, 18));
addButton2.addActionListener(e -> addButtonActionPerformed(e));
beverageActionPanel.add(addButton2);
//---- cancelButton2 ----
cancelButton2.setText("Cancel");
cancelButton2.setPreferredSize(new Dimension(63, 60));
cancelButton2.setFont(new Font("Tahoma", Font.BOLD, 18));
cancelButton2.addActionListener(e -> cancelButtonActionPerformed(e));
beverageActionPanel.add(cancelButton2);
}
beveragePanel.add(beverageActionPanel, BorderLayout.SOUTH);
}
tabbedPane1.addTab("Beverage", beveragePanel);
}
contentPane.add(tabbedPane1);
setSize(645, 465);
setLocationRelativeTo(getOwner());
}
private JTabbedPane tabbedPane1;
private JPanel foodPanel;
private JPanel itemPanel;
private JPanel actionPanel;
private JButton addButton;
private JButton cancelButton;
private JPanel beveragePanel;
private JPanel beverageItemPanel;
private JPanel beverageActionPanel;
private JButton addButton2;
private JButton cancelButton2;
}