java - SWT redraw shell -
the problem pretty obvious, want after press button (or label in case) layout change , update. tried several solution suggested none worked me. change in createloginlayout() inside 'login' mouse track listener. know code looks overcomplicated, because use windowbuilder
protected shell mainshell; private text hangmanpic; private text cluefield; private composite alphabetcomposite; private display display; private label currguess; private gamemanager gamemanager; private label cluetitle; private text usrfield; private label passtitle; private text passfield; private label login; private label register; public static void main(string[] args) { try { main window = new main(); window.open(); } catch (exception e) { e.printstacktrace(); } } /** * open window. */ public void open() { display = display.getdefault(); createcontents(); mainshell.open(); mainshell.layout(); while (!mainshell.isdisposed()) { if (!display.readanddispatch()) { display.sleep(); } } } /** * create contents of window. * @wbp.parser.entrypoint */ protected void createcontents() { //init new game gamemanager=new gamemanager(); //creategamemainlayout(); createloginlayout(); //createregisterlayout(); } /** * creates layout of login page */ private void createloginlayout(){ mainshell = new shell(display,swt.close | swt.title | swt.min); mainshell.setsize(685, 481); mainshell.settext("location hangman"); mainshell.setlayout(new formlayout()); image image = new image(display, system.getproperty("user.dir")+"/res/back.jpg"); mainshell.setbackgroundimage(image); mainshell.setbackgroundmode(swt.inherit_force); label gametitle = new label(mainshell, swt.none); gametitle.setfont(new font(display.getdefault(),"djb chalk up", 40, swt.none )); gametitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); gametitle.setalignment(swt.center); gametitle.settext("location hangman ^"); formdata fd_gametitle = new formdata(); fd_gametitle.top = new formattachment(0, 94); fd_gametitle.left = new formattachment(0, 10); fd_gametitle.right = new formattachment(100, -10); fd_gametitle.bottom = new formattachment(0, 163); gametitle.setlayoutdata(fd_gametitle); label usrtitle = new label(mainshell, swt.none); usrtitle.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); usrtitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); usrtitle.setalignment(swt.right); formdata fd_usrtitle = new formdata(); fd_usrtitle.top = new formattachment(gametitle, 81); fd_usrtitle.left = new formattachment(0, 10); usrtitle.setlayoutdata(fd_usrtitle); usrtitle.settext("username:"); usrfield = new text(mainshell, swt.none); fd_usrtitle.right = new formattachment(usrfield, -6); usrfield.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); usrfield.setforeground(swtresourcemanager.getcolor(swt.color_white)); formdata fd_usrfield = new formdata(); fd_usrfield.left = new formattachment(0, 331); fd_usrfield.right = new formattachment(100, -148); fd_usrfield.top = new formattachment(gametitle, 81); usrfield.setlayoutdata(fd_usrfield); passtitle = new label(mainshell, swt.none); passtitle.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); passtitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); passtitle.setalignment(swt.right); formdata fd_passtitle = new formdata(); fd_passtitle.top = new formattachment(usrtitle, 22); fd_passtitle.right = new formattachment(usrtitle, 0, swt.right); fd_passtitle.left = new formattachment(0, 10); passtitle.setlayoutdata(fd_passtitle); passtitle.settext("password:"); passfield = new text(mainshell, swt.password | swt.none); passfield.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); passfield.setforeground(swtresourcemanager.getcolor(swt.color_white)); formdata fd_passfield = new formdata(); fd_passfield.top = new formattachment(passtitle, 0, swt.top); fd_passfield.left = new formattachment(usrfield, 0, swt.left); fd_passfield.right = new formattachment(100, -148); passfield.setlayoutdata(fd_passfield); login = new label(mainshell, swt.none); fd_passtitle.bottom = new formattachment(login, -43); login.setalignment(swt.center); login.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); login.setforeground(swtresourcemanager.getcolor(swt.color_white)); login.settext("login"); formdata fd_login = new formdata(); fd_login.right = new formattachment(usrtitle, 0, swt.right); fd_login.bottom = new formattachment(100, -27); fd_login.top = new formattachment(100, -68); fd_login.left = new formattachment(0, 202); login.setlayoutdata(fd_login); login.addmousetracklistener(new mousetrackadapter() { @override public void mouseenter(mouseevent arg0) { login.setforeground(swtresourcemanager.getcolor(swt.color_dark_gray)); } @override public void mouseexit(mouseevent arg0) { login.setforeground(swtresourcemanager.getcolor(swt.color_white)); } }); register = new label(mainshell, swt.none); register.addmouselistener(new mouseadapter() { @override public void mousedown(mouseevent arg0) { createregisterlayout(); //change of layout mainshell.layout(true, true); mainshell.redraw(); mainshell.update(); } }); register.setalignment(swt.center); register.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); register.setforeground(swtresourcemanager.getcolor(swt.color_white)); register.settext("register"); formdata fd_register = new formdata(); fd_register.top = new formattachment(login, 0, swt.top); fd_register.left = new formattachment(usrfield, 0, swt.left); fd_register.right = new formattachment(100, -225); register.setlayoutdata(fd_register); register.addmousetracklistener(new mousetrackadapter() { @override public void mouseenter(mouseevent arg0) { register.setforeground(swtresourcemanager.getcolor(swt.color_dark_gray)); } @override public void mouseexit(mouseevent arg0) { register.setforeground(swtresourcemanager.getcolor(swt.color_white)); } }); } /** * creates layout of register page */ private void createregisterlayout(){ mainshell = new shell(display,swt.close | swt.title | swt.min); mainshell.setsize(685, 481); mainshell.settext("location hangman"); mainshell.setlayout(new formlayout()); image image = new image(display, system.getproperty("user.dir")+"/res/back.jpg"); mainshell.setbackgroundimage(image); mainshell.setbackgroundmode(swt.inherit_force); label gametitle = new label(mainshell, swt.none); gametitle.setfont(new font(display.getdefault(),"djb chalk up", 40, swt.none )); gametitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); gametitle.setalignment(swt.center); gametitle.settext("register"); formdata fd_gametitle = new formdata(); fd_gametitle.top = new formattachment(0, 94); fd_gametitle.left = new formattachment(0, 10); fd_gametitle.right = new formattachment(100, -10); fd_gametitle.bottom = new formattachment(0, 163); gametitle.setlayoutdata(fd_gametitle); label usrtitle = new label(mainshell, swt.none); usrtitle.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); usrtitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); usrtitle.setalignment(swt.right); formdata fd_usrtitle = new formdata(); fd_usrtitle.top = new formattachment(gametitle, 81); fd_usrtitle.left = new formattachment(0, 10); usrtitle.setlayoutdata(fd_usrtitle); usrtitle.settext("enter username:"); usrfield = new text(mainshell, swt.none); fd_usrtitle.right = new formattachment(usrfield, -6); usrfield.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); usrfield.setforeground(swtresourcemanager.getcolor(swt.color_white)); formdata fd_usrfield = new formdata(); fd_usrfield.left = new formattachment(0, 331); fd_usrfield.right = new formattachment(100, -148); fd_usrfield.top = new formattachment(gametitle, 81); usrfield.setlayoutdata(fd_usrfield); passtitle = new label(mainshell, swt.none); passtitle.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); passtitle.setforeground(swtresourcemanager.getcolor(swt.color_white)); passtitle.setalignment(swt.right); formdata fd_passtitle = new formdata(); fd_passtitle.top = new formattachment(usrtitle, 22); fd_passtitle.right = new formattachment(usrtitle, 0, swt.right); fd_passtitle.left = new formattachment(0, 10); passtitle.setlayoutdata(fd_passtitle); passtitle.settext("enter password:"); passfield = new text(mainshell, swt.password | swt.none); passfield.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); passfield.setforeground(swtresourcemanager.getcolor(swt.color_white)); formdata fd_passfield = new formdata(); fd_passfield.top = new formattachment(passtitle, 0, swt.top); fd_passfield.left = new formattachment(usrfield, 0, swt.left); fd_passfield.right = new formattachment(100, -148); passfield.setlayoutdata(fd_passfield); register = new label(mainshell, swt.none); register.setalignment(swt.center); register.setfont(new font(display.getdefault(),"djb chalk up", 20, swt.none )); register.setforeground(swtresourcemanager.getcolor(swt.color_white)); register.settext("ok"); formdata fd_register = new formdata(); fd_register.bottom = new formattachment(100, -40); fd_register.left = new formattachment(0, 276); fd_register.right = new formattachment(100, -280); register.setlayoutdata(fd_register); register.addmousetracklistener(new mousetrackadapter() { @override public void mouseenter(mouseevent arg0) { register.setforeground(swtresourcemanager.getcolor(swt.color_dark_gray)); } @override public void mouseexit(mouseevent arg0) { register.setforeground(swtresourcemanager.getcolor(swt.color_white)); } }); }
in createregisterlayout
, create new shell, shell never opened. since field mainshell
re-assigned invisible shell, subsequent calls mainshell
, such layout()
, update()
etc., don't have visible effect.
Comments
Post a Comment