diff --git a/.idea/libraries/github_lgooddatepicker_LGoodDatePicker.xml b/.idea/libraries/github_lgooddatepicker_LGoodDatePicker.xml
new file mode 100644
index 0000000..e807631
--- /dev/null
+++ b/.idea/libraries/github_lgooddatepicker_LGoodDatePicker.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 77a3cc7..0ec4c2b 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -3,5 +3,6 @@
+
\ No newline at end of file
diff --git a/cmpt213-a3.iml b/cmpt213-a3.iml
index b5d0958..0140e85 100644
--- a/cmpt213-a3.iml
+++ b/cmpt213-a3.iml
@@ -8,5 +8,6 @@
+
\ No newline at end of file
diff --git a/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1$1.class b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1$1.class
new file mode 100644
index 0000000..3951418
Binary files /dev/null and b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1$1.class differ
diff --git a/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1.class b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1.class
index 9975519..487765c 100644
Binary files a/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1.class and b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input$1.class differ
diff --git a/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input.class b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input.class
index 7470d01..bead105 100644
Binary files a/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input.class and b/out/production/cmpt213-a3/cmpt213/assignment3/packagedeliveries/view/Input.class differ
diff --git a/src/cmpt213/assignment3/packagedeliveries/view/Input.java b/src/cmpt213/assignment3/packagedeliveries/view/Input.java
index 3549f4a..d8da7d0 100644
--- a/src/cmpt213/assignment3/packagedeliveries/view/Input.java
+++ b/src/cmpt213/assignment3/packagedeliveries/view/Input.java
@@ -1,46 +1,194 @@
package cmpt213.assignment3.packagedeliveries.view;
+import com.github.lgooddatepicker.components.DateTimePicker;
+import com.github.lgooddatepicker.optionalusertools.DateTimeChangeListener;
+import com.github.lgooddatepicker.zinternaltools.DateTimeChangeEvent;
+
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.time.LocalDateTime;
+
+public class Input extends JDialog implements ActionListener, DateTimeChangeListener {
+ private JLabel typeLabel;
+private JPanel typePanel;
+private JTextField typeTf;
+private DateTimePicker dd, ed;
+private LocalDateTime deliveryDate, expiryDate;
+ private JTextField nameField;
+private JTextField noteField;
+ private JTextField priceField;
+private JTextField weightField;
+private JTextField dateField;
+private int pType;
-public class Input {
- JTextField typeLabel;
- public Input(Frame main){
+ public Input(Frame main) {
+ super(main, "add a package", true);
JPanel p = new JPanel();
- String[] type={"book", "perishable", "electronic"};
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
- JComboBox packageType=new JComboBox<>(type);
+ String[] type = {"book", "perishable", "electronic"};
+
+ JComboBox packageType = new JComboBox<>(type);
packageType.setPreferredSize(new Dimension(300, 30));
packageType.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- String p=(String) packageType.getSelectedItem();
- switch (p){
+ String p = (String) packageType.getSelectedItem();
+ switch (p) {
case "book":
+ typeTf.setVisible(true);
+ ed.setVisible(false);
typeLabel.setText("author name");
+ pType=0;
break;
case "perishable":
+ typeTf.setVisible(false);
+ ed.setVisible(true);
+ ed.addDateTimeChangeListener(new DateTimeChangeListener() {
+ @Override
+ public void dateOrTimeChanged(DateTimeChangeEvent dateTimeChangeEvent) {
+ expiryDate=ed.getDateTimePermissive();
+ }
+ });
+ typePanel.add(ed);
typeLabel.setText("expiry date");
+ pType=1;
break;
- case "electronic":
+ case "electronic":
+ typeTf.setVisible(true);
+ ed.setVisible(false);
typeLabel.setText("handling fee");
+ pType=2;
}
}
});
-
-JPanel name=new JPanel();
-JLabel nameLabel=new JLabel();
-JTextField namefield= new JTextField();
-name.setLayout(new BoxLayout(name, BoxLayout.X_AXIS));
-nameLabel.setText("name:");
-nameLabel.setPreferredSize(new Dimension(50, 25));
-name.add(nameLabel);
- name.add(namefield);
+ // Panel for package name
+ nameField = new JTextField();
+ JPanel name = new JPanel();
+ JLabel nameLabel = new JLabel();
+ name.setLayout(new BoxLayout(name, BoxLayout.X_AXIS));
+ nameLabel.setText("name:");
+ nameLabel.setPreferredSize(new Dimension(50, 25));
+ name.add(nameLabel);
+ name.add(nameField);
name.setPreferredSize(new Dimension(200, 50));
+p.add(packageType);
+p.add(name);
+ JPanel note = new JPanel();
+ JLabel noteLabel = new JLabel();
+ noteField = new JTextField();
+ note.setLayout(new BoxLayout(note, BoxLayout.X_AXIS));
+ noteLabel.setText("note:");
+ noteLabel.setPreferredSize(new Dimension(50, 25));
+ note.add(noteLabel);
+ note.add(noteField);
+ note.setPreferredSize(new Dimension(200, 50));
+ p.add(note);
+
+ JPanel price = new JPanel();
+ JLabel priceLabel = new JLabel();
+ JTextField priceField = new JTextField();
+ price.setLayout(new BoxLayout(price, BoxLayout.X_AXIS));
+ priceLabel.setText("price:");
+ priceLabel.setPreferredSize(new Dimension(50, 25));
+ price.add(priceLabel);
+ price.add(priceField);
+ price.setPreferredSize(new Dimension(200, 50));
+p.add(price);
+
+ JPanel weight = new JPanel();
+ JLabel weightLabel = new JLabel();
+ weightField = new JTextField();
+ weight.setLayout(new BoxLayout(weight, BoxLayout.X_AXIS));
+ weightLabel.setText("weight:");
+ weightLabel.setPreferredSize(new Dimension(50, 25));
+ weight.add(weightLabel);
+ weight.add(weightField);
+ weight.setPreferredSize(new Dimension(200, 50));
+ p.add(weight);
+
+ JPanel date = new JPanel();
+ JLabel dateLabel = new JLabel();
+ dateField = new JTextField();
+ date.setLayout(new BoxLayout(date, BoxLayout.X_AXIS));
+ dateLabel.setText("date:");
+ dateLabel.setPreferredSize(new Dimension(50, 25));
+ dd=new DateTimePicker();
+ dd.addDateTimeChangeListener(this);
+ date.add(dateLabel);
+ date.add(dd);
+ date.setPreferredSize(new Dimension(200, 50));
+ p.add(date);
+
+ typePanel=new JPanel();
+ typePanel.setLayout(new BoxLayout(typePanel, BoxLayout.X_AXIS));
+ typeLabel=new JLabel();
+ typeLabel.setText("author:");
+ typeLabel.setPreferredSize(new Dimension(50, 25));
+ typeTf=new JTextField();
+ typePanel.add(typeLabel);
+ typePanel.add(typeTf);
+ typePanel.setPreferredSize(new Dimension(200, 50));
+ ed=new DateTimePicker();
+ p.add(typePanel);
+
+JPanel actionButton = new JPanel();
+actionButton.setLayout(new BoxLayout(actionButton, BoxLayout.X_AXIS));
+JButton ok=new JButton("ok");
+JButton cancel=new JButton("cancel");
+ok.addActionListener(this);
+cancel.addActionListener(this);
+actionButton.add(ok);
+actionButton.add(cancel);
+p.add(actionButton);
+ // Dialog box dimensions
+ getContentPane().setSize(500, 500);
+ getContentPane().add(p);
+ pack();
+ this.setVisible(true);
+ }
+
+ @Override
+ public void dateOrTimeChanged(DateTimeChangeEvent dateTimeChangeEvent) {
+ deliveryDate=dd.getDateTimePermissive();
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+String actionString=e.getActionCommand();
+switch(actionString){
+ case "ok":
+ addPackage();
+ break;
+ case "cancel":
+ this.dispose();
+ break;
+}
+ }
+
+ private void addPackage(){
+ String pName=nameField.getText();
+ String pNote=noteField.getText();
+ double pPrice=Double.parseDouble(priceField.getText());
+ double pWeight=Double.parseDouble(weightField.getText());
+String pAuthor="";
+double pHandlingFee=0.0;
+if (pType==0){
+ pAuthor= typeTf.getText();
+ if (pAuthor.equals("")){
+ JOptionPane.showMessageDialog(this, "author name can not be empty", "error", JOptionPane.WARNING_MESSAGE);
+ return;
+ }
+}
+else if (pType==1){
+ pHandlingFee = Double.parseDouble(typeTf.getText());
+ if (pHandlingFee<=0){
+ JOptionPane.showMessageDialog(this, "Handling fee should be positive", "error", JOptionPane.WARNING_MESSAGE);
}
+}
+ }
}