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); } +} + } }