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, not paint 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 call super.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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -