Monday, 15 August 2011

java - Frame always on top of my program only -



java - Frame always on top of my program only -

i'm trying create kind of toolbar in undecorated alwaysontop frame. thus, want frame on top of main frame, not on top of frames other programs. tried code :

public class test { private static jframe mainframe; /** * @param args command line arguments */ public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { mainframe = new jframe("test"); mainframe.setsize(800,600); mainframe.setdefaultcloseoperation(jframe.dispose_on_close); mainframe.setvisible(true); a = new a(); } }); } public static class extends jdialog { public a() { super(mainframe); setalwaysontop(true); setfocusable(false); setsize(80,60); setvisible(true); } } }

but despite utilize of jdialog , precising owner, frame remain on top of other applications (at to the lowest degree ubuntu. maybe result different other os ?)

edit : ok, tried code dialog :

public static class extends jdialog { public a(string name) { super(mainframe, name); setalwaysontop(true); setfocusable(false); setsize(80, 60); setvisible(true); mainframe.addwindowlistener(new windowadapter() { @override public void windowactivated(windowevent e) { a.this.setalwaysontop(true); } @override public void windowdeactivated(windowevent e) { // a.this.setalwaysontop(false); a.this.toback(); } }); } }

the issue when main window loose focus, dialog steals focus , don't understand why. instance, run app, seek switch firefox, firefox appears , covers mainframe, dialog gets focus , stays in screen. now, if select firefox again, dialog @ lastly correctly disappear. explain me why dialog gets focus?

thanks

you should create window on top when parent window goes activated. this:

public class test { private static jframe mainframe; /** * @param args command line arguments */ public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { mainframe = new jframe("test"); mainframe.setsize(800,600); mainframe.setdefaultcloseoperation(jframe.dispose_on_close); mainframe.setvisible(true); final a = new a(); mainframe.addwindowlistener(new windowadapter() { /** * {@inheritdoc} */ @override public void windowdeactivated(windowevent e) { a.setalwaysontop(false); } /** * {@inheritdoc} */ @override public void windowactivated(windowevent e) { a.setalwaysontop(true); } }); } }); } public static class extends jdialog { public a() { super(mainframe); setalwaysontop(true); setfocusable(false); setsize(80,60); setvisible(true); } } }

java swing always-on-top

No comments:

Post a Comment