ElementPanel.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package org.leumasjaffe.recipe.view;
  2. import javax.swing.JPanel;
  3. import javax.swing.JScrollPane;
  4. import org.leumasjaffe.observer.ForwardingObservableListener;
  5. import org.leumasjaffe.observer.ObserverDispatch;
  6. import org.leumasjaffe.recipe.model.Phase;
  7. import org.leumasjaffe.recipe.model.Element;
  8. import lombok.AccessLevel;
  9. import lombok.experimental.FieldDefaults;
  10. import org.jdesktop.swingx.VerticalLayout;
  11. import javax.swing.JSeparator;
  12. import javax.swing.ScrollPaneConstants;
  13. import java.awt.GridBagLayout;
  14. import javax.swing.JLabel;
  15. import java.awt.GridBagConstraints;
  16. import java.awt.Insets;
  17. import java.awt.Component;
  18. import java.awt.Dimension;
  19. import javax.swing.Box;
  20. @SuppressWarnings("serial")
  21. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  22. public class ElementPanel extends JScrollPane {
  23. JPanel panelViewPort;
  24. ForwardingObservableListener<Element> listener = new ForwardingObservableListener<>();
  25. public ElementPanel(Element element) {
  26. setPreferredSize(new Dimension(500, 450));
  27. setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  28. setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  29. JPanel panelColumnHeader = new JPanel();
  30. setColumnHeaderView(panelColumnHeader);
  31. GridBagLayout gbl_panelColumnHeader = new GridBagLayout();
  32. gbl_panelColumnHeader.columnWidths = new int[]{0, 0, 0, 0};
  33. gbl_panelColumnHeader.rowHeights = new int[]{0, 0};
  34. gbl_panelColumnHeader.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
  35. gbl_panelColumnHeader.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  36. panelColumnHeader.setLayout(gbl_panelColumnHeader);
  37. JLabel lblName = new JLabel(element.getName());
  38. GridBagConstraints gbc_lblName = new GridBagConstraints();
  39. gbc_lblName.insets = new Insets(0, 0, 0, 5);
  40. gbc_lblName.gridx = 0;
  41. gbc_lblName.gridy = 0;
  42. panelColumnHeader.add(lblName, gbc_lblName);
  43. Component horizontalGlue = Box.createHorizontalGlue();
  44. GridBagConstraints gbc_horizontalGlue = new GridBagConstraints();
  45. gbc_horizontalGlue.insets = new Insets(0, 0, 0, 5);
  46. gbc_horizontalGlue.gridx = 1;
  47. gbc_horizontalGlue.gridy = 0;
  48. panelColumnHeader.add(horizontalGlue, gbc_horizontalGlue);
  49. CollatedDurationPanel panelDuration =
  50. new CollatedDurationPanel(element.getCollatedDuration());
  51. GridBagConstraints gbc_panelDuration = new GridBagConstraints();
  52. gbc_panelDuration.gridx = 2;
  53. gbc_panelDuration.gridy = 0;
  54. panelColumnHeader.add(panelDuration, gbc_panelDuration);
  55. panelViewPort = new JPanel();
  56. setViewportView(panelViewPort);
  57. panelViewPort.setLayout(new VerticalLayout(5));
  58. for (final Phase phase : element.getPhases()) {
  59. panelViewPort.add(new PhasePanel(phase));
  60. panelViewPort.add(new JSeparator());
  61. }
  62. listener.setObserved(element, element.getPhases());
  63. }
  64. @Override
  65. public void removeNotify() {
  66. super.removeNotify();
  67. ObserverDispatch.unsubscribeAll(listener);
  68. }
  69. }