1 | package genius.gui.deadline;
|
---|
2 |
|
---|
3 | import java.awt.BorderLayout;
|
---|
4 | import java.awt.Component;
|
---|
5 | import java.awt.Dimension;
|
---|
6 | import java.awt.event.ActionEvent;
|
---|
7 | import java.awt.event.ActionListener;
|
---|
8 |
|
---|
9 | import javax.swing.JComboBox;
|
---|
10 | import javax.swing.JLabel;
|
---|
11 | import javax.swing.JPanel;
|
---|
12 | import javax.swing.JSpinner;
|
---|
13 | import javax.swing.SpinnerNumberModel;
|
---|
14 | import javax.swing.event.ChangeEvent;
|
---|
15 | import javax.swing.event.ChangeListener;
|
---|
16 |
|
---|
17 | import genius.core.DeadlineType;
|
---|
18 | import genius.core.listener.Listener;
|
---|
19 |
|
---|
20 | /**
|
---|
21 | * panel allowing user to set the deadline.
|
---|
22 | *
|
---|
23 | * @author W.Pasman
|
---|
24 | *
|
---|
25 | */
|
---|
26 | @SuppressWarnings("serial")
|
---|
27 | public class DeadlinePanel extends JPanel {
|
---|
28 | private final SpinnerNumberModel valuemodel = new SpinnerNumberModel(180, 1, 10000, 10);
|
---|
29 | private JSpinner spinner = new JSpinner(valuemodel);
|
---|
30 | private JComboBox<DeadlineType> combobox = new JComboBox<DeadlineType>(DeadlineType.values());
|
---|
31 | private JLabel label = new JLabel("Deadline");
|
---|
32 | private DeadlineModel model;
|
---|
33 |
|
---|
34 | public DeadlinePanel(final DeadlineModel model) {
|
---|
35 | if (model == null)
|
---|
36 | throw new NullPointerException("model");
|
---|
37 | this.model = model;
|
---|
38 | setLayout(new BorderLayout());
|
---|
39 | add(label, BorderLayout.WEST);
|
---|
40 | add(spinner, BorderLayout.CENTER);
|
---|
41 | add(combobox, BorderLayout.EAST);
|
---|
42 | setMaximumSize(new Dimension(Short.MAX_VALUE, 30));
|
---|
43 | setAlignmentX(Component.RIGHT_ALIGNMENT);
|
---|
44 |
|
---|
45 | syncWithModel();
|
---|
46 |
|
---|
47 | spinner.addChangeListener(new ChangeListener() {
|
---|
48 | @Override
|
---|
49 | public void stateChanged(ChangeEvent e) {
|
---|
50 | model.setValue((Integer) valuemodel.getValue());
|
---|
51 | }
|
---|
52 | });
|
---|
53 | combobox.addActionListener(new ActionListener() {
|
---|
54 | @Override
|
---|
55 | public void actionPerformed(ActionEvent e) {
|
---|
56 | model.setType((DeadlineType) combobox.getSelectedItem());
|
---|
57 | }
|
---|
58 | });
|
---|
59 |
|
---|
60 | model.addListener(new Listener<DeadlineModel>() {
|
---|
61 |
|
---|
62 | @Override
|
---|
63 | public void notifyChange(DeadlineModel data) {
|
---|
64 | syncWithModel();
|
---|
65 | }
|
---|
66 |
|
---|
67 | });
|
---|
68 | }
|
---|
69 |
|
---|
70 | /**
|
---|
71 | * Sync panel with the model.
|
---|
72 | */
|
---|
73 | private void syncWithModel() {
|
---|
74 | spinner.setValue(model.getDeadline().getValue());
|
---|
75 | combobox.setSelectedItem(model.getDeadline().getType());
|
---|
76 | }
|
---|
77 |
|
---|
78 | }
|
---|