AddElementPopUp.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package ui.view;
  2. import classes.AbstractCanvasObject;
  3. import classes.HolonElement;
  4. import classes.HolonObject;
  5. import ui.model.Model;
  6. import utility.Util;
  7. import javax.swing.*;
  8. import javax.swing.border.EmptyBorder;
  9. import java.awt.*;
  10. import java.awt.event.KeyEvent;
  11. import java.awt.event.KeyListener;
  12. /**
  13. * popup for adding an Holon Element to a holon Object.
  14. *
  15. * @author Gruppe14
  16. * @author improved by A.T.M.-B. (Gruppe007)
  17. */
  18. public class AddElementPopUp extends JDialog {
  19. /**
  20. * Serial.
  21. */
  22. private static final long serialVersionUID = 1L;
  23. /* Data */
  24. /** Holon Object the Element should be added to */
  25. private AbstractCanvasObject tempCps;
  26. /** Holon Element that should be edited (if in edit Modus */
  27. private HolonElement hl;
  28. /* GUI */
  29. /** Panel containing everything */
  30. private final JPanel contentPanel = new JPanel();
  31. /** Textfield for entering a Name for the Element */
  32. private JTextField elementName;
  33. /** Textfield for the energy the Element consumes/produces */
  34. private JTextField providedEnergy;
  35. /** Element is active if checked */
  36. JCheckBox checkBoxActive;
  37. /** Textfield to enter the amount of this Element */
  38. private JTextField amount;
  39. /** Textfield to enter the flexible Energy of the Element */
  40. private JTextField flexibleEnergy;
  41. /** Flexible if checkbox is checked */
  42. JCheckBox checkboxFlexible;
  43. /** Model which is used */
  44. private Model model;
  45. /**
  46. * Create the AddElementPopup Dialog
  47. * @param parentFrame
  48. */
  49. AddElementPopUp(JFrame parentFrame, Model model) {
  50. super((java.awt.Frame) null, true);
  51. this.setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
  52. setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
  53. setBounds(100, 100, 400, 245);
  54. setLocationRelativeTo(parentFrame);
  55. getContentPane().setLayout(new BorderLayout());
  56. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  57. getContentPane().add(contentPanel, BorderLayout.CENTER);
  58. contentPanel.setLayout(null);
  59. this.setTitle(Languages.getLanguage()[64]);
  60. /* Element Name Textfield and Label */
  61. elementName = new JTextField();
  62. elementName.addKeyListener(new KeyListener() {
  63. @Override
  64. public void keyPressed(KeyEvent arg0) {
  65. }
  66. @Override
  67. public void keyReleased(KeyEvent e) {
  68. }
  69. @Override
  70. public void keyTyped(KeyEvent e) {
  71. elementName.setBackground(Color.WHITE);
  72. }
  73. });
  74. JLabel lblElementName = new JLabel(Languages.getLanguage()[65]);
  75. lblElementName.setBounds(10, 10, 100, 20);
  76. contentPanel.add(lblElementName);
  77. elementName.setBounds(130, 10, 110, 20);
  78. contentPanel.add(elementName);
  79. elementName.setColumns(10);
  80. /* Add Provided Energy Label and Textfield */
  81. JLabel lblProvidedEnergy = new JLabel(Languages.getLanguage()[66]);
  82. lblProvidedEnergy.setBounds(10, 50, 120, 20);
  83. contentPanel.add(lblProvidedEnergy);
  84. providedEnergy = new JTextField();
  85. providedEnergy.setBounds(130, 50, 110, 20);
  86. contentPanel.add(providedEnergy);
  87. providedEnergy.setColumns(10);
  88. providedEnergy.setText("0");
  89. checkBoxActive = new JCheckBox("Active");
  90. checkBoxActive.setSelected(true);
  91. checkBoxActive.setBounds(250, 50, 115, 20);
  92. contentPanel.add(checkBoxActive);
  93. /* Add Flexible Energy Textfield and CheckBox */
  94. JLabel lblFlexibleEnergy = new JLabel("Flexible Energy:");
  95. lblFlexibleEnergy.setBounds(10, 90, 100, 20);
  96. contentPanel.add(lblFlexibleEnergy);
  97. flexibleEnergy = new JTextField();
  98. flexibleEnergy.setText("0");
  99. flexibleEnergy.setColumns(10);
  100. flexibleEnergy.setBounds(130, 90, 110, 20);
  101. contentPanel.add(flexibleEnergy);
  102. checkboxFlexible = new JCheckBox("Flexible");
  103. checkboxFlexible.setBounds(250, 90, 115, 20);
  104. contentPanel.add(checkboxFlexible);
  105. /* Add Amount Textfield and Checkbox */
  106. JLabel lblAmount = new JLabel(Languages.getLanguage()[67]);
  107. lblAmount.setBounds(10, 130, 100, 14);
  108. contentPanel.add(lblAmount);
  109. amount = new JTextField();
  110. amount.setBounds(130, 130, 110, 20);
  111. contentPanel.add(amount);
  112. amount.setColumns(10);
  113. amount.setText("1");
  114. /* Add Buttons and Actions */
  115. JPanel buttonPane = new JPanel();
  116. buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
  117. getContentPane().add(buttonPane, BorderLayout.SOUTH);
  118. JButton okButton = new JButton("OK");
  119. okButton.addActionListener(arg0 -> okAction());
  120. okButton.setActionCommand("OK");
  121. buttonPane.add(okButton);
  122. getRootPane().setDefaultButton(okButton);
  123. JButton cancelButton = new JButton(Languages.getLanguage()[71]);
  124. cancelButton.setActionCommand("Cancel");
  125. buttonPane.add(cancelButton);
  126. cancelButton.addActionListener(e -> dispose());
  127. }
  128. /**
  129. * Sets the actual Cps.
  130. *
  131. * @param cps
  132. * actual Cps
  133. */
  134. void setActualCps(AbstractCanvasObject cps) {
  135. this.tempCps = cps;
  136. }
  137. /**
  138. * Returns the created Element.
  139. *
  140. * @return the Element
  141. */
  142. public HolonElement getElement() {
  143. return hl;
  144. }
  145. /**
  146. * setElement that should be edited
  147. * @param holonElement
  148. */
  149. public void setElement(HolonElement holonElement) {
  150. hl = holonElement;
  151. elementName.setText(hl.getEleName());
  152. amount.setText(""+hl.getAmount());
  153. providedEnergy.setText(""+hl.getEnergyPerElement());
  154. checkBoxActive.setSelected(hl.isActive());
  155. }
  156. /**
  157. * Trys to create/edit the Element
  158. */
  159. private void okAction() {
  160. boolean repeated = false;
  161. for (HolonElement e : ((HolonObject) tempCps).getElements()) {
  162. if (elementName.getText().equals(e.getEleName())&&(hl == null || hl.getId()!=e.getId())) {
  163. repeated = true;
  164. break;
  165. }
  166. }
  167. if (elementName.getText().length() != 0 && !repeated) {
  168. try {
  169. float energy = Float.parseFloat(providedEnergy.getText());
  170. int elementAmount = Integer.parseInt(amount.getText());
  171. if(hl == null){
  172. hl = new HolonElement(elementName.getText(), elementAmount, energy, model);
  173. } else {
  174. hl.setEleName(elementName.getText());
  175. hl.setAmount(elementAmount);
  176. hl.setEnergyPerElement(energy);
  177. }
  178. hl.setActive(checkBoxActive.isSelected());
  179. dispose();
  180. } catch (NumberFormatException e) {
  181. JOptionPane.showMessageDialog(new JFrame(), Languages.getLanguage()[68]);
  182. }
  183. } else {
  184. if (elementName.getText().length() == 0) {
  185. JLabel errorString = new JLabel(Languages.getLanguage()[69]);
  186. errorString.setBounds(240, 8, 100, 20);
  187. contentPanel.add(errorString);
  188. } else if (repeated) {
  189. JLabel errorString = new JLabel(Languages.getLanguage()[70]);
  190. errorString.setBounds(250, 8, 100, 20);
  191. contentPanel.add(errorString);
  192. }
  193. elementName.setBackground(new Color(255, 50, 50));
  194. }
  195. }
  196. }