import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
+import java.beans.*;
-/*
+/**
* Graphical representation of a MIDI note.
*
* @author Andersson, Andreen, Lanneskog, Pehrson
* @version 1
*/
-
+
public class MooNoteProp extends JDialog{
private MooNote note;
- /*
+ private JOptionPane optionPane;
+ private JTextField pitch;
+ private JTextField velocity;
+ private JTextField length;
+
+ /**
* Creates a new note preference dialog.
* @param mn The note that will be graphically represented
*/
- public MooNoteProp (MooNote mn) {
+ public MooNoteProp(MooNote mn) {
+ super((JFrame)null, true);
note = mn;
+ setTitle("Note properties");
+
+ pitch = new JTextField(new Integer(note.getPitch()).toString(),3);
+ JPanel pitchpanel = new JPanel();
+ pitchpanel.add(new Label("Pitch: "));
+ pitchpanel.add(pitch);
+
+
+ velocity = new JTextField(new Integer(note.getVelocity()).toString(),3);
+ JPanel velocitypanel = new JPanel();
+ velocitypanel.add(new Label("Velocity: "));
+ velocitypanel.add(velocity);
+
+ length = new JTextField(new Integer(note.getDuration()).toString(),5);
+ JPanel lengthpanel = new JPanel();
+ lengthpanel.add(new Label("Length: "));
+ lengthpanel.add(length);
+
+ Object[] array = {"Set the note properties",
+ pitchpanel,
+ velocitypanel,
+ lengthpanel};
+
+ final String btnString1 = "Enter";
+ final String btnString2 = "Cancel";
+ Object[] options = {btnString1, btnString2};
+
+ optionPane = new JOptionPane(array,
+ JOptionPane.QUESTION_MESSAGE,
+ JOptionPane.YES_NO_OPTION,
+ null,
+ options,
+ options[0]);
+ setContentPane(optionPane);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ActionListener intValidator = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() instanceof JTextField){
+ JTextField s = (JTextField)e.getSource();
+ int num = Integer.parseInt(s.getText());
+ if (num < 0)
+ num = 0;
+ else if (num > 127 && s != length)
+ num = 127;
+ s.setText(new Integer(num).toString());
+ }
+ }
+ };
+ pitch.addActionListener(intValidator);
+ velocity.addActionListener(intValidator);
+ length.addActionListener(intValidator);
+ optionPane.addPropertyChangeListener(new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent e) {
+ String prop = e.getPropertyName();
+
+ if (isVisible()
+ && (e.getSource() == optionPane)
+ && (prop.equals(JOptionPane.VALUE_PROPERTY) ||
+ prop.equals(JOptionPane.INPUT_VALUE_PROPERTY))) {
+ Object value = optionPane.getValue();
+
+ if (value == JOptionPane.UNINITIALIZED_VALUE) {
+ //ignore reset
+ return;
+ }
+
+ // Reset the JOptionPane's value.
+ // If you don't do this, then if the user
+ // presses the same button next time, no
+ // property change event will be fired.
+ optionPane.setValue(
+ JOptionPane.UNINITIALIZED_VALUE);
+
+ if (value.equals(btnString1)) {
+ note.setPitch(Integer.parseInt(pitch.getText()));
+ note.setVelocity(Integer.parseInt(velocity.getText()));
+ note.setDuration(Integer.parseInt(length.getText()));
+
+ setVisible(false);
+ } else { // user closed dialog or clicked cancel
+ setVisible(false);
+ }
+ }
+ }
+ });
pack();
- }
+ }
+
+ public static void main(String[] args){
-
+ MooNote n = new MooNote(0,0,10,20,0,30);
+ MooNoteProp prop = new MooNoteProp(n);
+ prop.setVisible(true);
+ prop = new MooNoteProp(n);
+ prop.setVisible(true);
+
+ }
}