swing - How to add a mouse hover listener to a rectangle in Java -


i trying make button using rectangle object , trying make color change on hover, , not change. have made code have more generic names variables way not confuse, here is:

public class mousehandler extends mouseadapter {     @override     public void mousemoved(mouseevent e) {         int mx = e.getx();         int = e.gety();         if(mx > button.x && mx < button.x+button.width &&                 > button.y && < button.y+button.height) {                 buttonhover = true;         } else {                 buttonhover = false;          }     } } 

and tried calling these lines of code also, wouldn't work:

if(buttonhover) g.setcolor(hovercolor); g.drawrect(button.x, button.y, button.width, button.height); 

i put full code @ bottom, actual variable names. help!

package trivia;  import java.awt.color; import java.awt.dimension; import java.awt.font; import java.awt.fontmetrics; import java.awt.graphics; import java.awt.rectangle; import java.awt.event.mouseadapter; import java.awt.event.mouseevent;  import javax.swing.jframe;  @suppresswarnings("serial") public class main extends jframe{  boolean mainmenu = true; boolean starthover; static color tan = color.decode("#f4ebc3"); static color darkgreen = color.decode("#668284"); static color buttoncolor = color.decode("#a2896b"); static color bordercolor = color.decode("#333333"); static color buttonhover = color.decode("#f5b66e"); rectangle header = new rectangle(0, 0, 500, 100); rectangle body = new rectangle(0, 100, 500, 400); rectangle start = new rectangle(150, 150, 200, 40); rectangle howtoplay = new rectangle(150, 225, 200, 40); rectangle quit = new rectangle(150, 300, 200, 40);  public main() {     settitle("trivia game!");     setsize(500, 500);     setvisible(true);     setdefaultcloseoperation(jframe.exit_on_close);     setlocationrelativeto(null);  } @override public void paint(graphics g) {     dimension d = this.getsize();     if(mainmenu = true){         g.setcolor(darkgreen);         g.fillrect(header.x, header.y, header.width, header.height);         g.setfont(new font("courier", font.bold, 24));         g.setcolor(color.black);         drawcenteredstring("trivia game!", d.width, 125, g);         g.setcolor(tan);         g.fillrect(body.x, body.y, body.width, body.height);         g.setcolor(buttoncolor);         g.fillrect(start.x, start.y, start.width, start.height);         g.setcolor(bordercolor);         g.drawrect(start.x, start.y, start.width, start.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("start", d.width, 340, g);         g.setcolor(buttoncolor);         g.fillrect(howtoplay.x, howtoplay.y, howtoplay.width, howtoplay.height);         g.setcolor(bordercolor);         g.drawrect(howtoplay.x, howtoplay.y, howtoplay.width, howtoplay.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("how play", d.width, 490, g);         g.setcolor(buttoncolor);         g.fillrect(quit.x, quit.y, quit.width, quit.height);         g.setcolor(bordercolor);         g.drawrect(quit.x, quit.y, quit.width, quit.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("quit?", d.width, 640, g);         g.setcolor(buttoncolor);         g.fillrect(start.x, start.y, start.width, start.height);         g.setcolor(bordercolor);         g.drawrect(start.x, start.y, start.width, start.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("start", d.width, 340, g);         if(starthover)             g.setcolor(buttonhover);             g.drawrect(start.x, start.y, start.width, start.height);     } } public void drawcenteredstring(string s, int w, int h, graphics g) {     fontmetrics fm = g.getfontmetrics();     int x = (w - fm.stringwidth(s)) / 2;     int y = (fm.getascent() + (h- (fm.getascent() + fm.getdescent())) / 2);     g.drawstring(s, x, y); }  public static void main(string[] args) {     @suppresswarnings("unused")     main m = new main(); } public class mousehandler extends mouseadapter {     @override     public void mousemoved(mouseevent e) {         int mx = e.getx();         int = e.gety();         if(mx > start.x && mx < start.x+start.width &&                 > start.y && < start.y+start.height) {                 starthover = true;                 system.out.println("yes");         } else {                 starthover = false;                 system.out.println("no");         }     } } } 

i'll start with...

1) if rectangle want deal with. please use https://docs.oracle.com/javase/7/docs/api/java/awt/rectangle.html , java has been kind enough make life simple please don't throw away. (ignore keeping here reference)

2) should implement mousemotionlistener... did you.

import java.awt.color; import java.awt.dimension; import java.awt.font; import java.awt.fontmetrics; import java.awt.graphics; import java.awt.rectangle; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener;  import javax.swing.jframe;  @suppresswarnings("serial") public class test extends jframe  implements mousemotionlistener {  boolean mainmenu = true; boolean starthover; static color tan = color.decode("#f4ebc3"); static color darkgreen = color.decode("#668284"); static color buttoncolor = color.decode("#a2896b"); static color bordercolor = color.decode("#333333"); static color buttonhover = color.decode("#f5b66e"); rectangle header = new rectangle(0, 0, 500, 100); rectangle body = new rectangle(0, 100, 500, 400); rectangle start = new rectangle(150, 150, 200, 40); rectangle howtoplay = new rectangle(150, 225, 200, 40); rectangle quit = new rectangle(150, 300, 200, 40);  public test() {     settitle("trivia game!");     setsize(500, 500);     setvisible(true);     setdefaultcloseoperation(jframe.exit_on_close);     setlocationrelativeto(null);     this.addmousemotionlistener(this); }  @override public void paint(graphics g) {     dimension d = this.getsize();     if (mainmenu = true) {         g.setcolor(darkgreen);         g.fillrect(header.x, header.y, header.width, header.height);         g.setfont(new font("courier", font.bold, 24));         g.setcolor(color.black);         drawcenteredstring("trivia game!", d.width, 125, g);         g.setcolor(tan);         g.fillrect(body.x, body.y, body.width, body.height);         g.setcolor(buttoncolor);         g.fillrect(start.x, start.y, start.width, start.height);         g.setcolor(bordercolor);         g.drawrect(start.x, start.y, start.width, start.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("start", d.width, 340, g);         g.setcolor(buttoncolor);         g.fillrect(howtoplay.x, howtoplay.y, howtoplay.width,                 howtoplay.height);         g.setcolor(bordercolor);         g.drawrect(howtoplay.x, howtoplay.y, howtoplay.width,                 howtoplay.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("how play", d.width, 490, g);         g.setcolor(buttoncolor);         g.fillrect(quit.x, quit.y, quit.width, quit.height);         g.setcolor(bordercolor);         g.drawrect(quit.x, quit.y, quit.width, quit.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("quit?", d.width, 640, g);         g.setcolor(buttoncolor);         g.fillrect(start.x, start.y, start.width, start.height);         g.setcolor(bordercolor);         g.drawrect(start.x, start.y, start.width, start.height);         g.setfont(new font("courier", font.bold, 20));         g.setcolor(color.black);         drawcenteredstring("start", d.width, 340, g);         if (starthover)             g.setcolor(buttonhover);         g.drawrect(start.x, start.y, start.width, start.height);     } }  public void drawcenteredstring(string s, int w, int h, graphics g) {     fontmetrics fm = g.getfontmetrics();     int x = (w - fm.stringwidth(s)) / 2;     int y = (fm.getascent() + (h - (fm.getascent() + fm.getdescent())) / 2);     g.drawstring(s, x, y); }  public static void main(string[] args) {     @suppresswarnings("unused")     test m = new test(); }  @override public void mousedragged(mouseevent arg0) {     // todo auto-generated method stub  }  @override public void mousemoved(mouseevent e) {     system.out.println("lol");     int mx = e.getx();     int = e.gety();     if (mx > start.x && mx < start.x + start.width && > start.y             && < start.y + start.height) {         starthover = true;         system.out.println("yes");     } else {         starthover = false;         system.out.println("no");     } } } 

if read below can see there lot of things wrong code. don't let scare learning. step step , fine.


Comments