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
Post a Comment