java - Placing a restart button on my screen -
i have created "game over!" page when user loses in game. under g.drawstring(...), trying create button user can click restart game. having trouble getting button appear , stay visible.
how can create jbutton in custom paint(graphics g) method in java? suggestions?
import java.awt.event.*; import javax.swing.*; import java.awt.*; public class game extends jpanel implements keylistener { private player player; private stage stage; private stage stageleft; private stage stageright; private enemymanager manager; private boolean isgameover = false; private boolean restart = false; public game() { setsize(800,600); setpreferredsize(new dimension(800,600)); setfocusable(true); setbackground(color.white); requestfocus(); addkeylistener(this); stage = new stage(0, 540, 800, 100); stageleft = new stage(-1, 0, 1, 600); stageright = new stage(800, 0, 1, 600); player = new player(this, 400, 400); manager = new enemymanager(this, 10); } @override public void update(graphics g) { paint(g); } public void paint(graphics g) { g.setcolor(color.white); g.fillrect(0,0,getwidth(),getheight()); stage.draw(g); stageleft.draw(g); stageright.draw(g); if(!isgameover || restart) { player.draw(g); manager.draw(g); } else { g.setcolor(color.black); g.fillrect(0, 0, getwidth(), getheight()); g.setcolor(color.white); g.setfont(new font("century gothic", font.bold, 24)); g.drawstring("game over!", 330, 275); g.drawrect(330, 300, 145, 40); g.drawstring("restart", 350, 320); //todo: make restart button works } g.dispose(); repaint(); } @override public void keypressed(keyevent e) { int c = e.getkeycode(); if(c == keyevent.vk_w) { } if(c == keyevent.vk_a) { player.setxdir(-1); } if(c == keyevent.vk_s) { } if(c == keyevent.vk_d) { player.setxdir(1); } } public void setgameover(boolean flag) { isgameover = flag; } @override public void keyreleased(keyevent e) { player.setxdir(0); player.setydir(0); } @override public void keytyped(keyevent e) { } public stage getstage() { return stage; } public stage getstageleft() { return stageleft; } public stage getstageright() { return stageright; } public enemymanager getenemymanager() { return manager; } public static void main(string[] args) { game game = new game(); jframe frame = new jframe(); frame.settitle("java game"); frame.add(game); frame.pack(); frame.setpreferredsize(new dimension(800,600)); frame.setresizable(false); frame.setdefaultcloseoperation(jframe.exit_on_close); // center window frame.setlocationrelativeto(null); frame.setvisible(true); } }
regarding,
how can create jbutton in custom paint(graphics g) method in java?
answer: don't. never create or place components within of painting methods. these methods rendering images , rendering , should never used component creation or program logic.
this question xy problem:
i have created "game over!" page when user loses in game. under g.drawstring(...), trying create button user can click restart game. having trouble getting button appear , stay visible.
in you're asking solution specific code problem, when true best solution use different approach. suggest:
- create jpanel displays background image in
paintcomponent
method, notpaint
method per swing painting tutorials - add jbutton jpanel add jpanel, , not in painting methods.
- you're better off creating separate jpanel this, , swap jpanels when needed via cardlayout.
other issues:
- never dispose of graphics object given jvm. doing breaks painting chain.
- you should call super's painting method inside of override painting chain can continue. if override
paintcomponent
per recommendation, should sure callsuper.paintcomponent(g)
method within own override. - never call
repaint()
within painting method. bad way try animation uncontrollable , risky. - don't override
update()
while done awt painting, not used swing graphics or animation.
Comments
Post a Comment