Setting a JFrame without overlapping with taskbar

前端 未结 2 1821

I need to have a undecorated JFrame(setUndecorated(true)) which need to be shown fullscreen, without overlapping with the taskbar.

I have t

相关标签:
2条回答
  • 2021-01-20 05:42
    final Point x = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
    

    Have a separate thread to check whether taskbar get changed. If so update size

    new Thread(new Runnable() {
         @Override
         public void run() {
            if (x.equals(GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint())) {
               Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
               setSize(r.getSize());
            }
            try {
               Thread.sleep(5000);
            } catch (InterruptedException ex) {
               Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
      }).start();
    
    0 讨论(0)
  • 2021-01-20 05:54

    Able to able to fix the above issue with the below code,

    Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
    setMaximizedBounds(usableBounds);
    setExtendedState(MAXIMIZED_BOTH);
    

    So by getUsableBounds I am able to get the bounds leaving the taskbar. And hence I am using setExtendedState(MAXIMIZED_BOTH) the window is getting updated automatically when I re-size/re-position the taskbar. :-)

    0 讨论(0)
提交回复
热议问题