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