JPanel refresh issue with game -


i making lan command based game, , parsing structured english java. have parsed , can draw grid, can hard code text grid before runtime , cant seem grid refresh new text.

parsing class:

public class serverplayerparsing {     servergridgenerator servergrid = new servergridgenerator (10, 10); public string validate(string command){ servergrid.framegen();  if (wordcount(command)== 3) {      string[] commandarray = command.split(" ");     commandparsing(commandarray); } else {     system.out.println("error! format incorrect!");     system.out.println("correct format = [command 1] [command 2] [command 3]"); } return ""; } public  int wordcount(string command){ string[] commandcount = command.split("\\s"); return commandcount.length; } public  string commandparsing(string[] commandarray) { switch (commandarray[0]) { case "move": secondcommand (commandarray); break; default: system.out.println("error in first command!"); }         return " "; } public string secondcommand (string commandarray[]) { switch (commandarray[1]) { case "forward": forwardmovement(commandarray); break; case "backward": backwardmovement (commandarray); break; case "left": leftmovement (commandarray); break; case "right": rightmovement (commandarray); break; default: system.out.println("error in second command!"); }  return " "; } public   string forwardmovement (string commandarray[]) { switch (commandarray[2]) {      case "1":      servergrid.serverplayermoveforward(1);      break;      case "2":      servergrid.serverplayermoveforward(2);      break;      default: system.out.println("error in third command!");     } return " "; } public   string backwardmovement (string commandarray[]) { switch (commandarray[2]) {      case "1":      servergrid.serverplayermovebackward(1);      break;      case "2":      servergrid.serverplayermovebackward(2);      break;      default: system.out.println("error in third command!");     }     return " "; } public   string leftmovement (string commandarray[]) { switch (commandarray[2]) {      case "1":      servergrid.serverplayermoveleft(1);      break;      case "2":      servergrid.serverplayermoveleft(2);      break;      default: system.out.println("error in third command!");     }     return " "; } public   string rightmovement (string commandarray[]) { switch (commandarray[2]) {      case "1":      servergrid.serverplayermoveright(1);      break;      case "2":      servergrid.serverplayermoveright(2);      break;      default: system.out.println("error in third command!");     } return " "; } }  

grid generator class:

import java.awt.color; import java.awt.container; import java.awt.dimension; import java.awt.gridlayout; import javax.swing.jbutton; import javax.swing.jframe; public class servergridgenerator extends jframe { public int serverplayerxpos = 0; public int serverplayerypos = 0; public int clientplayerxpos = 0; public int clientplayerypos = 9; public int endxpos = 9; public int endypos = 5; int row = 10; int column = 10; int sizegrid = 700; jbutton[][] squarebuttons = new jbutton [row][column];  public void framegen(){ servergridgenerator frame = new servergridgenerator(row, column); frame.setpreferredsize(new dimension(sizegrid, sizegrid)); frame.setlocationrelativeto(null); frame.pack(); frame.setvisible(true); }  public servergridgenerator(int r, int c) { squarebuttons = new jbutton [r][c]; container pane = getcontentpane(); pane.setlayout(new gridlayout(r, c)); for(int y=0; y<c; y++){     (int x=0; x<r; x++) {          squarebuttons[y][x] = new jbutton("");          squarebuttons[y][x].setopaque(true);          squarebuttons[y][x].setbackground(color.white);          squarebuttons[y][x].setenabled(false);          pane.add(squarebuttons[y][x]);      }         }         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");         squarebuttons[clientplayerypos][clientplayerxpos].settext(" p2");         squarebuttons[endypos][endxpos].settext(" end"); }   public void serverplayermoveright (int moveby){     (int i=0; i<moveby; i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerxpos = serverplayerxpos + 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");     }  }  public void serverplayermoveleft (int moveby){     (int i=0; i<moveby; i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerxpos = serverplayerxpos - 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");     }  }  public void serverplayermoveforward (int moveby){     (int i=0; i<moveby; i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerypos = serverplayerypos + 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");     }  }  public void serverplayermovebackward (int moveby){      (int i=0; i<moveby; i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerypos = serverplayerypos - 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");       }  } 

my issue can draw first " p1", " p2", " end" when parser calls methods moving forward, backward, left, right doesnt draw on grid, can explain why happens , can fix this?

thanks time

=================================================================================

edited:

i have realised im doing wrong , need call movements within gridgenerator/constructor method. have changed code , hard coded value , works, need make parser call drawing methods constructor , im having trouble that. please me call draw movements following example instead of hard coding values need them got parser.

import java.awt.color; import java.awt.container; import java.awt.dimension; import java.awt.gridlayout; import javax.swing.jbutton; import javax.swing.jframe; public class servergridgenerator extends jframe { public int serverplayerxpos = 0; public int serverplayerypos = 0; public int clientplayerxpos = 0; public int clientplayerypos = 9; public int endxpos = 9; public int endypos = 5; int row = 10; int column = 10; int sizegrid = 700; jbutton[][] squarebuttons = new jbutton [row][column]; //public serverplayerparsing serverpc = new serverplayerparsing();  public void framegen(){ servergridgenerator frame = new servergridgenerator(row, column); frame.setpreferredsize(new dimension(sizegrid, sizegrid)); frame.setlocationrelativeto(null); frame.pack(); frame.setvisible(true); }  public servergridgenerator(int r, int c) { squarebuttons = new jbutton [r][c]; container pane = getcontentpane(); pane.setlayout(new gridlayout(r, c)); for(int y=0; y<c; y++){     (int x=0; x<r; x++) {          squarebuttons[y][x] = new jbutton("");          squarebuttons[y][x].setopaque(true);          squarebuttons[y][x].setbackground(color.white);          squarebuttons[y][x].setenabled(false);          pane.add(squarebuttons[y][x]);      }         }         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");         squarebuttons[clientplayerypos][clientplayerxpos].settext(" p2");         squarebuttons[endypos][endxpos].settext(" end");         serverplayermoveright(6); // <============ hard coded value }   public void serverplayermoveright (int moveby){     (int i=0; i<(moveby+1); i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerxpos = serverplayerxpos + 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");         repaint();         validate();     }  }  public void serverplayermoveleft (int moveby){     (int i=0; i<(moveby+1); i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerxpos = serverplayerxpos - 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");     }  }  public void serverplayermoveforward (int moveby){     (int i=0; i<(moveby+1); i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerypos = serverplayerypos + 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");     }  }  public void serverplayermovebackward (int moveby){      (int i=0; i<(moveby+1); i++) {         squarebuttons[serverplayerypos][serverplayerxpos].settext(" ");         serverplayerypos = serverplayerypos - 1;         squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");       }  }  public void timedelay (){     try {         thread.sleep(1000);     } catch(interruptedexception ex) {         thread.currentthread().interrupt();     }  } } 

the problem think creating multiple instances of frame seeing 1 of them. inside driver class have following code:

public class serverplayerparsing {          servergridgenerator servergrid = new servergridgenerator (10, 10);      public string validate(string command){          servergrid.framegen();           if (wordcount(command)== 3) {              string[] commandarray = command.split(" ");             commandparsing(commandarray);          } else {             system.out.println("error! format incorrect!");             system.out.println("correct format = [command 1] [command 2] [command 3]");          }          return "";      } 

notice how create servergridgenerator class level object inside validate command calling servergrid.framegen(). framegen has code:

public void framegen(){    servergridgenerator frame = new servergridgenerator(row, column);    frame.setpreferredsize(new dimension(sizegrid, sizegrid));    frame.setlocationrelativeto(null);    frame.pack();    frame.setvisible(true); } 

so everytime call validate method creating instance of servergridgenerator frame , making frame visible. see if when execute multiple commands if getting multiple frames being created.

also noticed instance create servergrid never being shown, instance receiving movement commands.

=====edit in response request example=====

starting posted code servergridgenerator, made following changes constructor only, rest left as-is:

public servergridgenerator(int r, int c) {    squarebuttons = new jbutton [r][c];    container pane = getcontentpane();    pane.setlayout(new gridlayout(r, c));    for(int y=0; y<c; y++){        (int x=0; x<r; x++) {            squarebuttons[y][x] = new jbutton("");            squarebuttons[y][x].setopaque(true);            squarebuttons[y][x].setbackground(color.white);            squarebuttons[y][x].setenabled(false);            pane.add(squarebuttons[y][x]);        }            }    squarebuttons[serverplayerypos][serverplayerxpos].settext(" p1");    squarebuttons[clientplayerypos][clientplayerxpos].settext(" p2");    squarebuttons[endypos][endxpos].settext(" end");     /*****     added these lines *******/    setpreferredsize(new dimension(sizegrid, sizegrid));    setlocationrelativeto(null);    pack();    setvisible(true); } 

and deleted method framegen unnecessary. in serverplayerparsing code, inside validate method removed call servergrid.framegen() since no longer present.

to test code, added main serverplayerparsing , input loop accept commands otherwise left code intact:

import java.io.*;  public class serverplayerparsing {      /*** need main test code ****/     static public void main(string[] args) throws exception {        serverplayerparsing td = new serverplayerparsing();        td.go();     }      /***** provides simple user prompt/input loop testing ****/     public void go() throws exception {       datainputstream cin = new datainputstream(system.in);       boolean running = true;       string line;        while(running) {         system.out.printf("> ");         line = cin.readline();         line = line.trim();         if(line.length() == 0) continue;         if( line.equalsignorecase("exit") ) {             running = false;             continue;         }         system.out.println("validate: " + validate(line.tolowercase()));       }       system.exit(0);    }     /***** below original except framegen call ***/    servergridgenerator servergrid = new servergridgenerator (10, 10);    public string validate(string command){      /** no longer needed   servergrid.framegen();   */     if (wordcount(command)== 3) {        string[] commandarray = command.split(" ");       commandparsing(commandarray);     } else {       system.out.println("error! format incorrect!");       system.out.println("correct format = [command 1] [command 2] [command 3]");     }     return "";   }   public  int wordcount(string command){     string[] commandcount = command.split("\\s");     return commandcount.length;   }   public  string commandparsing(string[] commandarray) {     switch (commandarray[0]) {       case "move":         secondcommand (commandarray);         break;       default: system.out.println("error in first command!");     }             return " ";   }   public string secondcommand (string commandarray[]) {     switch (commandarray[1]) {        case "forward":           forwardmovement(commandarray);           break;        case "backward":           backwardmovement (commandarray);           break;        case "left":           leftmovement (commandarray);           break;        case "right":           rightmovement (commandarray);           break;        default: system.out.println("error in second command!");     }      return " ";   }   public   string forwardmovement (string commandarray[]) {      switch (commandarray[2]) {        case "1":          servergrid.serverplayermoveforward(1);          break;        case "2":          servergrid.serverplayermoveforward(2);          break;        default: system.out.println("error in third command!");       }       return " ";    }     public   string backwardmovement (string commandarray[]) {        switch (commandarray[2]) {          case "1":             servergrid.serverplayermovebackward(1);             break;          case "2":             servergrid.serverplayermovebackward(2);             break;          default: system.out.println("error in third command!");        }        return " ";    }     public   string leftmovement (string commandarray[]) {        switch (commandarray[2]) {           case "1":              servergrid.serverplayermoveleft(1);              break;           case "2":              servergrid.serverplayermoveleft(2);               break;           default: system.out.println("error in third command!");        }        return " ";     }     public   string rightmovement (string commandarray[]) {        switch (commandarray[2]) {           case "1":             servergrid.serverplayermoveright(1);             break;             case "2":               servergrid.serverplayermoveright(2);               break;               default: system.out.println("error in third command!");         }         return " ";     }   }  

this code work intended, can't see rest of code don't know how main interacting parser class.

the code cleaned quite bit. example, instead of passing string of various move... methods , switching on value parse 3rd command array element using integer.parseint(). if parse successful value integer, otherwise command bad. eliminate of move functions , handle in secondcommmand method this:

public string secondcommand (string commandarray[]) {   int steps = -1;   try {     steps = integer.parseint(commandarray[2]) ;   } catch(exception ex) {     steps = -1;   }   if( steps == -1 || steps > 2) {     system.out.println("error in third command.");   } else {     switch (commandarray[1]) {       case "forward":         servergrid.serverplayermoveforward(steps);         break;       case "backward":         servergrid.serverplayermovebackward(steps);         break;       case "left":         servergrid.serverplayermoveleft(steps);         break;       case "right":         servergrid.serverplayermoveright(steps);         break;       default: system.out.println("error in second command!");     }   }   return " "; } 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -