m@0
|
1 /*=============================================================================
|
m@0
|
2 * File: StimulusPanel.java
|
m@0
|
3 * Author: Marcus Pearce <m.pearce@gold.ac.uk>
|
m@0
|
4 * Created: <2007-12-05 11:24:00 marcusp>
|
marcus@21
|
5 * Time-stamp: <2012-03-27 16:39:33 marcusp>
|
m@0
|
6 *=============================================================================
|
m@0
|
7 */
|
m@0
|
8
|
m@0
|
9 import java.awt.*;
|
m@0
|
10 import java.awt.event.*;
|
m@0
|
11 import javax.swing.*;
|
m@0
|
12
|
m@0
|
13 public class StimulusPanel extends JPanel {
|
m@0
|
14
|
m@0
|
15 /* the Experiment */
|
m@0
|
16 private Experiment exp;
|
m@0
|
17 private ExperimentGui gui;
|
m@0
|
18
|
m@0
|
19 /* navigation buttons */
|
m@0
|
20 private JButton playButton, nextButton;
|
m@0
|
21
|
m@0
|
22 /* The response buttons */
|
m@0
|
23 private JButton[] responseButton;
|
m@0
|
24
|
m@0
|
25 /* The song number label */
|
m@0
|
26 private JLabel songNumberLabel;
|
m@0
|
27
|
m@0
|
28 /* The questions about each melody */
|
m@0
|
29 private JComboBox q1Box;
|
m@0
|
30 private JComboBox q2Box;
|
m@0
|
31
|
m@0
|
32 /* accessors */
|
m@0
|
33 public JButton getPlayButton() { return playButton; }
|
m@0
|
34 public JButton getNextButton() { return nextButton; }
|
m@0
|
35 public JButton[] getResponseButtons() { return responseButton; }
|
m@0
|
36 public JComboBox getQ1Box() { return q1Box; }
|
m@0
|
37 public JComboBox getQ2Box() { return q2Box; }
|
m@0
|
38
|
m@0
|
39 /* constructor */
|
m@0
|
40 public StimulusPanel(ExperimentGui egui, Clock clock) {
|
m@0
|
41
|
m@0
|
42 gui = egui;
|
m@0
|
43 exp = gui.getExperiment();
|
m@0
|
44 responseButton = new JButton[exp.getScaleLength()];
|
m@0
|
45
|
m@0
|
46 // The display panel (Clock)
|
m@0
|
47 JPanel displayPanel = new JPanel();
|
m@0
|
48 displayPanel.setBackground(Color.black);
|
m@0
|
49 displayPanel.setBorder(BorderFactory.createRaisedBevelBorder());
|
m@0
|
50 displayPanel.setLayout(new GridBagLayout());
|
m@0
|
51 GridBagConstraints c = new GridBagConstraints();
|
m@0
|
52 c.fill = GridBagConstraints.HORIZONTAL;
|
m@0
|
53 c.gridx = 2;
|
m@0
|
54 c.gridy = 2;
|
m@0
|
55 displayPanel.add(clock, c);
|
m@0
|
56
|
m@0
|
57 // Add the response buttons
|
jeremy@31
|
58 /*
|
m@0
|
59 JPanel responsePanel = new JPanel();
|
m@0
|
60 responsePanel.setLayout (new BorderLayout());
|
m@0
|
61 responsePanel.setBorder(BorderFactory.createRaisedBevelBorder());
|
m@0
|
62
|
m@0
|
63 JPanel anchorsPanel = new JPanel();
|
m@0
|
64 anchorsPanel.add(new JLabel(exp.getLowAnchor()), BorderLayout.WEST);
|
m@0
|
65 anchorsPanel.add(new JLabel(" "),
|
m@0
|
66 BorderLayout.CENTER);
|
m@0
|
67 anchorsPanel.add(new JLabel(exp.getHighAnchor()), BorderLayout.EAST);
|
jeremy@31
|
68
|
m@0
|
69 JPanel ratingsPanel = new JPanel();
|
m@0
|
70 for (int i = 0; i < responseButton.length; i++) {
|
m@0
|
71 responseButton[i] = new JButton(Integer.toString(i+1));
|
m@0
|
72 responseButton[i].setFocusPainted(false);
|
m@0
|
73 ratingsPanel.add(responseButton[i]);
|
m@0
|
74 }
|
m@0
|
75 responsePanel.add(ratingsPanel, BorderLayout.NORTH);
|
m@0
|
76 responsePanel.add(anchorsPanel, BorderLayout.SOUTH);
|
jeremy@31
|
77 */
|
jeremy@31
|
78
|
jeremy@31
|
79 JPanel responsePanel = new JPanel();
|
jeremy@31
|
80 responsePanel.setLayout(new FlowLayout());
|
jeremy@31
|
81 responsePanel.setBorder(BorderFactory.createRaisedBevelBorder());
|
jeremy@31
|
82
|
jeremy@31
|
83 responsePanel.add(new JLabel(exp.getLowAnchor()));
|
jeremy@31
|
84 for (int i = 0; i < responseButton.length; i++) {
|
jeremy@31
|
85 responseButton[i] = new JButton(Integer.toString(i+1));
|
jeremy@31
|
86 responseButton[i].setFocusPainted(false);
|
jeremy@31
|
87 responsePanel.add(responseButton[i]);
|
jeremy@31
|
88 }
|
jeremy@31
|
89 responsePanel.add(new JLabel(exp.getHighAnchor()));
|
m@0
|
90
|
m@0
|
91 // Questions Panel
|
m@0
|
92 JPanel questionsPanel = new JPanel();
|
m@0
|
93 GridLayout gl = new GridLayout(2,2);
|
m@0
|
94 gl.setHgap(50);
|
m@8
|
95 questionsPanel.setLayout(gl);
|
m@0
|
96
|
m@8
|
97 if (exp.getAskFamiliarity()) {
|
m@8
|
98 String[] q1BoxOptions = { "", "Yes", "No" };
|
m@8
|
99 q1Box = new JComboBox(q1BoxOptions);
|
m@8
|
100 q1Box.setSelectedIndex(0);
|
m@8
|
101 questionsPanel.add(new JLabel("Are you familiar with this melody?"));
|
m@8
|
102 questionsPanel.add(q1Box);
|
m@8
|
103 }
|
m@0
|
104
|
m@8
|
105 if (exp.getAskLiking()) {
|
m@8
|
106 String[] q2BoxOptions = { "", "1", "2", "3", "4", "5"};
|
m@8
|
107 q2Box = new JComboBox(q2BoxOptions);
|
m@8
|
108 q2Box.setSelectedIndex(0);
|
jeremy@34
|
109 questionsPanel.add(new JLabel("How much do you like this melody as a whole? (1 = not at all; 5 = very much)"));
|
m@8
|
110 questionsPanel.add(q2Box);
|
m@8
|
111 }
|
m@0
|
112
|
m@0
|
113 JPanel questionsPanel2 = new JPanel();
|
m@0
|
114 questionsPanel2.setBorder(BorderFactory.createRaisedBevelBorder());
|
m@0
|
115 questionsPanel2.add(questionsPanel, BorderLayout.CENTER);
|
m@0
|
116
|
m@0
|
117 // Navigation Panel
|
m@0
|
118 JPanel navPanel = new JPanel();
|
m@0
|
119 playButton = new JButton(new ImageIcon("Icons/Play24.gif"));
|
m@0
|
120 playButton.setText("Play");
|
m@0
|
121
|
m@0
|
122 nextButton = new JButton(new ImageIcon("Icons/StepForward24.gif"));
|
marcus@21
|
123 nextButton.setText("Next");
|
m@0
|
124
|
m@0
|
125 songNumberLabel = new JLabel("");
|
m@0
|
126 setSongNumberText();
|
m@0
|
127 navPanel.add(songNumberLabel);
|
m@0
|
128 //navPanel.add(playButton);
|
m@0
|
129 navPanel.add(nextButton);
|
m@0
|
130 navPanel.setBorder(BorderFactory.createRaisedBevelBorder());
|
m@0
|
131
|
m@0
|
132 // Add it all
|
m@0
|
133 JPanel southPanel = new JPanel();
|
m@0
|
134 southPanel.setLayout (new BorderLayout());
|
m@0
|
135 southPanel.add(responsePanel, BorderLayout.NORTH);
|
m@0
|
136 southPanel.add(questionsPanel2, BorderLayout.CENTER);
|
m@0
|
137
|
m@0
|
138 this.setLayout (new BorderLayout());
|
m@0
|
139 this.add(navPanel, BorderLayout.NORTH);
|
m@0
|
140 this.add(displayPanel, BorderLayout.CENTER);
|
m@0
|
141 this.add(southPanel, BorderLayout.SOUTH);
|
m@0
|
142 }
|
m@0
|
143
|
JShulver@23
|
144
|
JShulver@23
|
145 //resets the background colour of the buttons
|
JShulver@23
|
146 public void resetButtonBackgrounds() {
|
JShulver@23
|
147 for(JButton button : responseButton) {
|
JShulver@23
|
148 button.setBackground(UIManager.getColor( "Button.background" ));
|
JShulver@23
|
149 }
|
JShulver@23
|
150 }
|
JShulver@23
|
151
|
JShulver@23
|
152
|
m@0
|
153 public void setSongNumberText() {
|
m@0
|
154 String m =
|
m@0
|
155 "Block " +
|
m@0
|
156 exp.getCurrentBlockID() +
|
m@0
|
157 ", Melody " +
|
m@0
|
158 Integer.toString(exp.getCurrentBlock().getMelodyNumber()) +
|
m@0
|
159 ": ";
|
m@0
|
160 songNumberLabel.setText(m);
|
m@0
|
161 }
|
m@0
|
162
|
m@0
|
163 public void defaultAnswers() {
|
m@8
|
164 if (exp.getAskFamiliarity())
|
m@8
|
165 q1Box.setSelectedIndex(0);
|
m@8
|
166 if (exp.getAskLiking())
|
m@8
|
167 q2Box.setSelectedIndex(0);
|
m@0
|
168 }
|
m@0
|
169
|
m@0
|
170 public boolean unansweredQuestions() {
|
m@8
|
171 if ((exp.getAskFamiliarity() && q1Box.getSelectedItem().equals("")) ||
|
m@8
|
172 (exp.getAskLiking() && q2Box.getSelectedItem().equals("")))
|
m@0
|
173 return true;
|
m@0
|
174 else
|
m@0
|
175 return false;
|
m@0
|
176 }
|
m@0
|
177
|
m@0
|
178 public void addAllListeners(ActionListener al) {
|
m@0
|
179 playButton.addActionListener(al);
|
m@0
|
180 nextButton.addActionListener(al);
|
m@0
|
181
|
m@0
|
182 for (int i = 0; i < responseButton.length; i++) {
|
m@0
|
183 responseButton[i].addActionListener(al);
|
m@0
|
184 }
|
m@0
|
185 }
|
m@0
|
186
|
m@0
|
187 public void addAllKeyListeners(KeyListener al) {
|
m@0
|
188 playButton.addKeyListener(al);
|
m@0
|
189 nextButton.addKeyListener(al);
|
m@0
|
190
|
m@0
|
191 for (int i = 0; i < responseButton.length; i++) {
|
m@0
|
192 responseButton[i].addKeyListener(al);
|
m@0
|
193 }
|
m@0
|
194 }
|
jeremy@26
|
195
|
jeremy@26
|
196 public void setResponseEnabled(boolean set) {
|
jeremy@26
|
197 for (int i = 0; i < responseButton.length; i++) {
|
jeremy@26
|
198 responseButton[i].setEnabled(set);
|
jeremy@26
|
199 }
|
jeremy@26
|
200 }
|
jeremy@26
|
201
|
jeremy@26
|
202 public void highlightResponse(int buttonIndex) {
|
jeremy@26
|
203 responseButton[buttonIndex].setBackground(Color.blue);
|
jeremy@26
|
204 responseButton[buttonIndex].setOpaque(true);
|
jeremy@28
|
205 responseButton[buttonIndex].revalidate();
|
jeremy@26
|
206 }
|
jeremy@26
|
207
|
m@0
|
208 }
|