java - Toggle JDialog visibility on button press or lose focus -


java gurus,

looking toggle jdialog's visibility when jbutton pressed or when jdialog loses focus i.e. when area of screen outside jdialog becomes active. lose focus working fine, it's handed windowfocuslistener can't functionality jbutton i.e. 1st click => jdialog visible, 2nd click => jdialog invisible, 3rd click => jdialog visible.

i don't want go down route of making jdialog modal or counting clicks on button.

any ideas of achieving above functionality in simple, clean way?

import java.awt.color; import java.awt.dimension; import java.awt.flowlayout; import java.awt.point; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowfocuslistener;  import javax.swing.*;   public class testframeexample {      public static void main(string s[]) {          final jdialog dialog = new jdialog();         final jbutton button = new jbutton();          jframe frame = new jframe("help me toggle jdialog!");          jpanel panel = new jpanel();         panel.setlayout(new flowlayout());          jlabel label = new jlabel("dialog visibility should toggle when jbutton pressed!");          button.settext("toggle dialog");         button.setfocusable(false);         button.addactionlistener(new actionlistener() {              public void actionperformed(actionevent e){                 //execute when button pressed                 dialog.setvisible(!dialog.isvisible());                 dialog.setlocation(new point(button.getlocationonscreen().x, button.getlocationonscreen().y+30));             }         });          dialog.setsize(new dimension(110,80));         dialog.setvisible(false);         dialog.setbackground(null);         dialog.setmodal(false);         dialog.setdefaultcloseoperation(jdialog.dispose_on_close);         dialog.setlocationrelativeto(null);         dialog.setalwaysontop(false);         dialog.setundecorated(true);         dialog.addwindowfocuslistener(new windowfocuslistener(){             public void windowlostfocus(windowevent arg0) {                 dialog.setvisible(false);             }             public void windowgainedfocus(windowevent e) {              }         });         ((jcomponent) dialog.getcontentpane()).setborder(new roundedborder(color.gray, 1,1,12));         ((jcomponent) dialog.getcontentpane()).setopaque(false);          panel.add(label);         panel.add(button);          frame.add(panel);         frame.setsize(350, 300);         frame.setlocationrelativeto(null);         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.setvisible(true);     } } 

dialog.setvisible(!dialog.isvisible()); 

Comments

Popular posts from this blog

html - Firefox flex bug applied to buttons? -

html - Missing border-right in select on Firefox -

c# - two queries in same method -