AggressiveDuckling
AggressiveDuckling

Reputation: 13

Are there any errors in my java applet?

I'm currently in my High School Programming 1 class and am working on my final project. We were allowed to create anything we want and I decided to make a program where there is the first 12 frets of a guitar neck and you can click on a string in a fret and it will tell you what note it is as well as play what the note sounds like. I managed to get my program to tell me what note I picked on the first rectangle I set. I then duplicated that code a bunch and changed the values to make the rest of the frets. However, it is no longer telling me what note I'm pressing when I try to click on one. My program builds and executes fine with no errors so I'm not too sure what to do and I could really use a hand. Any and all replies are much appreciated!

import java.awt.*;
import java.applet.Applet;

public class Final extends Applet
{
    //s6f1 stands for string 6 fret 1
    int sf;
    Rectangle s6f1, s6f2, s6f3, s6f4, s6f5, s6f6, s6f7, s6f8, s6f9, s6f10, s6f11, s6f12;

    public static void main (String[] args)
    {

    }

    public void paint (Graphics g)
    {
        drawNeck(g);
        int x = 690;
        int y = 153;
        Expo.setColor(g,Expo.red);
        Expo.setFont(g,"Arial",Font.BOLD,28);

        switch (sf)
        {
                case 1 : 
            Expo.drawString(g,"F",x,y);
            break;
                case 2 : 
            Expo.drawString(g,"F#/Gb",x,y);
            break;
                case 3 : 
            Expo.drawString(g,"G",x,y);
            break;
                case 4 : 
            Expo.drawString(g,"G#/Ab",x,y);
            break;
                case 5 : 
            Expo.drawString(g,"A",x,y);
            break;
                case 6 : 
            Expo.drawString(g,"A#,Bb",x,y);
            break;
                case 7 : 
            Expo.drawString(g,"B",x,y);
            break;
                case 8 : 
            Expo.drawString(g,"C",x,y);
            break;
                case 9 : 
            Expo.drawString(g,"C#/Db",x,y);
            break;
                case 10 : 
            Expo.drawString(g,"D",x,y);
            break;
                case 11 : 
            Expo.drawString(g,"D#/Eb",x,y);
            break;
                case 12 : 
            Expo.drawString(g,"E",x,y);
            break;
        }


    }




    public void init()
    {
        int m = 50;
        int n = 10;
        //s stands for string, f stands for fret; ex: s6f1 means String 6 Fret 1
        s6f1  = new Rectangle (50,198,m,n);
        s6f2  = new Rectangle (101,198,m,n);
        s6f3  = new Rectangle (151,198,m,n);
        s6f4  = new Rectangle (201,198,m,n);
        s6f5  = new Rectangle (251,198,m,n);
        s6f6  = new Rectangle (301,198,m,n);
        s6f7  = new Rectangle (351,198,m,n);
        s6f8  = new Rectangle (401,198,m,n);
        s6f9  = new Rectangle (451,198,m,n);
        s6f10 = new Rectangle (501,198,m,n);
        s6f11 = new Rectangle (551,198,m,n);
        s6f12 = new Rectangle (601,198,m,n);
        sf = 0;
    }


    public boolean mouseDown(Event e, int x, int y)
    {
        if(s6f1.inside(x,y))
            sf = 1;
        if(s6f2.inside(x,y))
            sf = 2;
        if(s6f3.inside(x,y))
            sf = 3;
        if(s6f4.inside(x,y))
            sf = 4;
        if(s6f5.inside(x,y))
            sf = 5;
        if(s6f6.inside(x,y))
            sf = 6;
        if(s6f7.inside(x,y))
            sf = 7;
        if(s6f8.inside(x,y))
            sf = 8;
        if(s6f9.inside(x,y))
            sf = 9;
        if(s6f10.inside(x,y))
            sf = 10;
        if(s6f11.inside(x,y))
            sf = 11;
        if(s6f12.inside(x,y))
            sf = 12;
        else
            sf = 100;
        repaint();
        return true;
    }

    public static void drawNeck (Graphics g)
    {
        int a = 50;
        int b = 225;
        int c = 650;
        //The Background
        Expo.setColor(g,Expo.black);
        Expo.fillRectangle(g,0,0,1000,650);
        Expo.setColor(g,Expo.lightPink);
        Expo.fillRectangle(g,10,10,990,640);
        //The neck
        Expo.setColor(g,Expo.brown);
        Expo.fillRectangle(g,50,50,650,225);
        //The frets
        Expo.setColor(g,Expo.black);
        Expo.drawLine(g,100,a,100,b);
        Expo.drawLine(g,150,a,150,b);
        Expo.drawLine(g,200,a,200,b);
        Expo.drawLine(g,250,a,250,b);
        Expo.drawLine(g,300,a,300,b);
        Expo.drawLine(g,350,a,350,b);
        Expo.drawLine(g,400,a,400,b);
        Expo.drawLine(g,450,a,450,b);
        Expo.drawLine(g,500,a,500,b);
        Expo.drawLine(g,550,a,550,b);
        Expo.drawLine(g,600,a,600,b);
        Expo.drawLine(g,650,a,650,b);
        //The Inlays
        Expo.setColor(g,Expo.white);
        Expo.fillCircle(g,175,137,10);
        Expo.fillCircle(g,275,137,10);
        Expo.fillCircle(g,375,137,10);
        Expo.fillCircle(g,475,137,10);
        Expo.fillCircle(g,625,112,10);
        Expo.fillCircle(g,625,163,10);  
        //The Strings
        Expo.setColor(g,Expo.grey);
        Expo.fillRectangle(g,a,73,c,77);
        Expo.fillRectangle(g,a,98,c,102);
        Expo.fillRectangle(g,a,123,c,127);
        Expo.fillRectangle(g,a,148,c,152);
        Expo.fillRectangle(g,a,173,c,177);
        Expo.fillRectangle(g,a,198,c,202);
        //String names and Fret numbers
        Expo.setColor(g,Expo.blue);
        Expo.setFont(g,"Arial",Font.BOLD,14);
        Expo.drawString(g,"E",20,210);
        Expo.drawString(g,"A",20,180);
        Expo.drawString(g,"D",20,155);
        Expo.drawString(g,"G",20,130);
        Expo.drawString(g,"B",20,105);
        Expo.drawString(g,"e",20,75);
        Expo.drawString(g,"Note:",680,120);
        Expo.setFont(g,"Arial",Font.ITALIC,24);
        Expo.drawString(g,"Created by Mitchell",640,635);
        //The User-interface
            //The Chords area
            int t = 150;
        Expo.setFont(g,"Arial",Font.BOLD,28);
        Expo.drawString(g,"Chords:",800,50);
        Expo.setColor(g,Expo.lightBlue);
        Expo.fillRectangle(g,700+t,80,740+t,120);
        Expo.fillRectangle(g,750+t,80,790+t,120);
        Expo.fillRectangle(g,700+t,130,740+t,170);
        Expo.fillRectangle(g,750+t,130,790+t,170);
        Expo.fillRectangle(g,700+t,180,740+t,220);
        Expo.fillRectangle(g,750+t,180,790+t,220);
            //The note area
        Expo.fillRectangle(g,680,123,745,163);

    }

}

Additional info: -My High School class uses the Expo java file for applets -This is what my applet looks like when I run it: https://i.sstatic.net/V4KE8.jpg

Upvotes: 1

Views: 58

Answers (1)

isnot2bad
isnot2bad

Reputation: 24464

The problem is your if-cascade in mouseDown. As you don't use else if, all if statements are evaluated, no matter which one actually yields true. Not a big problem, but the last if has an else part, that will be executed every time you don't click in s6f12.

So sf will always be either 12 or 100.

Solution: Use else if:

if (s6f1.inside(x,y)) sf = 1;
else if (s6f2.inside(x,y)) sf = 2;
else if (s6f3.inside(x,y)) ...
...
else sf = 100;

Upvotes: 1

Related Questions