# Button

## Button

For this project, you will create 4 buttons. 1 Button, the clearButton, will be a basic Button using the constructor to set the x, y, w, h for the button's position and size, and then specifying 2 colors and a String, label, that's used to display text on the Button. You will also define a child class, either PImageButton or PShapeButton so you can create Buttons that display an image.

## Example Use

```java
//Button Constructor showing parameter details
//Button( int x, int y, int w, int h, color c1, color c2, String label)

//Declare and initialize
Button button1 = new Button( 10, 10, 100, 100, color1, color2, "Button1");

//display the button
button1.display();

//click the button
button1.click( mouseX, mouseY);
```

## Class Code

```java
class Button{
  ////Instance Variables - Properties
  float x, y;   //position
  float w, h;   //size dimensions
  boolean selected;
  color defaultColor, selectedColor, currentColor;
  String label;  ///text to display

  /////Constructor Methods
  /////Initialize our instance variables
  ////Overloaded versions of constructors - unique parameter lists

  Button( float _x, float y, float w, float h,  String label){
    x = _x;   //set value for class variable x, using parameter _x
    this.y = y;
    this.w = w; 
    this.h = h;
    selectedColor = color(280, 100, 100);
    defaultColor = color(280, 50,50);
    currentColor = defaultColor;  ///button is off to begin with, so use default color 
    selected = false;
    this.label = label;
  }

  Button( float _x, float y, float w, float h, color onColor, color offColor, String label){
    x = _x;   //set value for class variable x, using parameter _x
    this.y = y;
    this.w = w; 
    this.h = h;
    selectedColor = onColor;
    defaultColor = offColor;
    currentColor = defaultColor;  ///button is off to begin with, so use default color 
    selected = false;
    this.label = label;
  }

////Class Methods
  void display(){
    fill(currentColor);
    rect( x, y, w, h);
    fill(0); //black
    textAlign(CENTER);
    textSize(20);
    text(label, x + w/2, y + h/2);  //display label
  }

  //checks to see if mouse is within the button geometry
  //returns the final selected state of button //true or false
  boolean clicked(int mx, int my){
    if( mx > x && mx < x+w && my >y && my < y+h){   //button has been clicked
     selected = ! selected; //change to opposite value
      if( selected ){ //now set to selected is true
        currentColor = selectedColor;
       }else{      //not selected
         currentColor = defaultColor;
      } //end else
    }  //end outer if
    return selected; //returns true if selected 
  } ///end of clicked

    //sets the button to off state
    void reset(){
       selected = false;
       currentColor = defaultColor;
    }

    //allows us to set a button as active via code
    void setActive(){
         selected = true;
         currentColor = selectedColor;
    }


}  ///end of the Button Class
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kdoore.gitbook.io/cs1335-java-and-processing/project-3/project-3-class-definitions/button.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
