m@0: /*============================================================================= m@0: * File: StimulusPanel.java m@0: * Author: Marcus Pearce m@0: * Created: <2007-12-05 11:24:00 marcusp> marcus@21: * Time-stamp: <2012-03-27 16:39:33 marcusp> m@0: *============================================================================= m@0: */ m@0: m@0: import java.awt.*; m@0: import java.awt.event.*; m@0: import javax.swing.*; m@0: m@0: public class StimulusPanel extends JPanel { m@0: m@0: /* the Experiment */ m@0: private Experiment exp; m@0: private ExperimentGui gui; m@0: m@0: /* navigation buttons */ m@0: private JButton playButton, nextButton; m@0: m@0: /* The response buttons */ m@0: private JButton[] responseButton; m@0: m@0: /* The song number label */ m@0: private JLabel songNumberLabel; m@0: m@0: /* The questions about each melody */ m@0: private JComboBox q1Box; c@42: private JComboBox q2Box; c@42: c@42: /* Message Panel Text */ c@42: private JLabel msgPrompt; c@42: String defaultMessagePrompt = " "; m@0: m@0: /* accessors */ m@0: public JButton getPlayButton() { return playButton; } m@0: public JButton getNextButton() { return nextButton; } m@0: public JButton[] getResponseButtons() { return responseButton; } m@0: public JComboBox getQ1Box() { return q1Box; } m@0: public JComboBox getQ2Box() { return q2Box; } m@0: m@0: /* constructor */ m@0: public StimulusPanel(ExperimentGui egui, Clock clock) { m@0: m@0: gui = egui; m@0: exp = gui.getExperiment(); m@0: responseButton = new JButton[exp.getScaleLength()]; m@0: m@0: // The display panel (Clock) m@0: JPanel displayPanel = new JPanel(); m@0: displayPanel.setBackground(Color.black); m@0: displayPanel.setBorder(BorderFactory.createRaisedBevelBorder()); m@0: displayPanel.setLayout(new GridBagLayout()); m@0: GridBagConstraints c = new GridBagConstraints(); m@0: c.fill = GridBagConstraints.HORIZONTAL; m@0: c.gridx = 2; m@0: c.gridy = 2; m@0: displayPanel.add(clock, c); m@0: m@0: // Add the response buttons jeremy@31: /* m@0: JPanel responsePanel = new JPanel(); m@0: responsePanel.setLayout (new BorderLayout()); m@0: responsePanel.setBorder(BorderFactory.createRaisedBevelBorder()); m@0: m@0: JPanel anchorsPanel = new JPanel(); m@0: anchorsPanel.add(new JLabel(exp.getLowAnchor()), BorderLayout.WEST); m@0: anchorsPanel.add(new JLabel(" "), m@0: BorderLayout.CENTER); m@0: anchorsPanel.add(new JLabel(exp.getHighAnchor()), BorderLayout.EAST); jeremy@31: m@0: JPanel ratingsPanel = new JPanel(); m@0: for (int i = 0; i < responseButton.length; i++) { m@0: responseButton[i] = new JButton(Integer.toString(i+1)); m@0: responseButton[i].setFocusPainted(false); m@0: ratingsPanel.add(responseButton[i]); m@0: } m@0: responsePanel.add(ratingsPanel, BorderLayout.NORTH); m@0: responsePanel.add(anchorsPanel, BorderLayout.SOUTH); jeremy@31: */ jeremy@31: jeremy@31: JPanel responsePanel = new JPanel(); jeremy@31: responsePanel.setLayout(new FlowLayout()); jeremy@31: responsePanel.setBorder(BorderFactory.createRaisedBevelBorder()); jeremy@31: jeremy@31: responsePanel.add(new JLabel(exp.getLowAnchor())); jeremy@31: for (int i = 0; i < responseButton.length; i++) { jeremy@31: responseButton[i] = new JButton(Integer.toString(i+1)); jeremy@31: responseButton[i].setFocusPainted(false); jeremy@31: responsePanel.add(responseButton[i]); jeremy@31: } jeremy@31: responsePanel.add(new JLabel(exp.getHighAnchor())); m@0: m@0: // Questions Panel m@0: JPanel questionsPanel = new JPanel(); m@0: GridLayout gl = new GridLayout(2,2); m@0: gl.setHgap(50); m@8: questionsPanel.setLayout(gl); m@0: m@8: if (exp.getAskFamiliarity()) { m@8: String[] q1BoxOptions = { "", "Yes", "No" }; m@8: q1Box = new JComboBox(q1BoxOptions); m@8: q1Box.setSelectedIndex(0); m@8: questionsPanel.add(new JLabel("Are you familiar with this melody?")); m@8: questionsPanel.add(q1Box); m@8: } m@0: m@8: if (exp.getAskLiking()) { m@8: String[] q2BoxOptions = { "", "1", "2", "3", "4", "5"}; m@8: q2Box = new JComboBox(q2BoxOptions); m@8: q2Box.setSelectedIndex(0); jeremy@34: questionsPanel.add(new JLabel("How much do you like this melody as a whole? (1 = not at all; 5 = very much)")); m@8: questionsPanel.add(q2Box); m@8: } m@0: m@0: JPanel questionsPanel2 = new JPanel(); m@0: questionsPanel2.setBorder(BorderFactory.createRaisedBevelBorder()); m@0: questionsPanel2.add(questionsPanel, BorderLayout.CENTER); m@0: m@0: // Navigation Panel m@0: JPanel navPanel = new JPanel(); m@0: playButton = new JButton(new ImageIcon("Icons/Play24.gif")); m@0: playButton.setText("Play"); m@0: m@0: nextButton = new JButton(new ImageIcon("Icons/StepForward24.gif")); marcus@21: nextButton.setText("Next"); m@0: m@0: songNumberLabel = new JLabel(""); m@0: setSongNumberText(); m@0: navPanel.add(songNumberLabel); m@0: //navPanel.add(playButton); m@0: navPanel.add(nextButton); m@0: navPanel.setBorder(BorderFactory.createRaisedBevelBorder()); c@42: c@42: // Message Prompt Panel c@42: JPanel msgPanel = new JPanel(); c@42: msgPrompt = new JLabel(defaultMessagePrompt); c@42: msgPanel.add(msgPrompt); c@42: msgPanel.setBorder(BorderFactory.createRaisedBevelBorder()); c@42: m@0: // Add it all m@0: JPanel southPanel = new JPanel(); m@0: southPanel.setLayout (new BorderLayout()); c@42: southPanel.add(msgPanel, BorderLayout.NORTH); c@42: southPanel.add(responsePanel, BorderLayout.CENTER); c@42: southPanel.add(questionsPanel2, BorderLayout.SOUTH); m@0: m@0: this.setLayout (new BorderLayout()); m@0: this.add(navPanel, BorderLayout.NORTH); m@0: this.add(displayPanel, BorderLayout.CENTER); m@0: this.add(southPanel, BorderLayout.SOUTH); m@0: } m@0: c@42: public void showDefaultMessagePrompt(){ c@42: msgPrompt.setText(defaultMessagePrompt); c@42: } c@42: c@42: public void setMessagePrompt(String prompt){ c@42: msgPrompt.setText(prompt); c@42: } c@42: JShulver@23: //resets the background colour of the buttons JShulver@23: public void resetButtonBackgrounds() { JShulver@23: for(JButton button : responseButton) { JShulver@23: button.setBackground(UIManager.getColor( "Button.background" )); JShulver@23: } JShulver@23: } JShulver@23: JShulver@23: m@0: public void setSongNumberText() { m@0: String m = m@0: "Block " + m@0: exp.getCurrentBlockID() + m@0: ", Melody " + m@0: Integer.toString(exp.getCurrentBlock().getMelodyNumber()) + m@0: ": "; m@0: songNumberLabel.setText(m); m@0: } m@0: m@0: public void defaultAnswers() { m@8: if (exp.getAskFamiliarity()) m@8: q1Box.setSelectedIndex(0); m@8: if (exp.getAskLiking()) m@8: q2Box.setSelectedIndex(0); m@0: } m@0: m@0: public boolean unansweredQuestions() { m@8: if ((exp.getAskFamiliarity() && q1Box.getSelectedItem().equals("")) || m@8: (exp.getAskLiking() && q2Box.getSelectedItem().equals(""))) m@0: return true; m@0: else m@0: return false; m@0: } m@0: m@0: public void addAllListeners(ActionListener al) { m@0: playButton.addActionListener(al); m@0: nextButton.addActionListener(al); m@0: m@0: for (int i = 0; i < responseButton.length; i++) { m@0: responseButton[i].addActionListener(al); m@0: } m@0: } m@0: m@0: public void addAllKeyListeners(KeyListener al) { m@0: playButton.addKeyListener(al); m@0: nextButton.addKeyListener(al); m@0: m@0: for (int i = 0; i < responseButton.length; i++) { m@0: responseButton[i].addKeyListener(al); m@0: } m@0: } jeremy@26: jeremy@26: public void setResponseEnabled(boolean set) { jeremy@26: for (int i = 0; i < responseButton.length; i++) { jeremy@26: responseButton[i].setEnabled(set); jeremy@26: } jeremy@26: } jeremy@26: jeremy@26: public void highlightResponse(int buttonIndex) { jeremy@26: responseButton[buttonIndex].setBackground(Color.blue); jeremy@26: responseButton[buttonIndex].setOpaque(true); jeremy@28: responseButton[buttonIndex].revalidate(); jeremy@26: } jeremy@26: m@0: }