3

タスクバーと重ならないように、フルスクリーンで表示する必要がある装飾されていない JFrame( setUndecorated(true) ) が必要です。

以下の解決策を試しました。

  • setExtendedState(MAXIMIZED_BOTH) を呼び出しています。

    • 利点: これは期待どおりにうまく機能します。つまり、ウィンドウは動的に調整されますが、以下の問題があります。
    • 問題 最初にウィンドウがフルスクリーンを占有します フレームは動的に調整されますが、タスクバーと重なります。
  • Does JFrame.setExtendedState(MAXIMIZED_BOTH) work with undecorated frames?に記載されているように、以下のソリューションを試しましたか?

     GraphicsConfiguration config = aFrame.getGraphicsConfiguration();
     Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
     aFrame.setBounds(0, 0, usableBounds.width, usableBounds.height);
    
    • 利点:オーバーラップが発生せず、ウィンドウがきれいに見えます。
    • 問題: タスクバーの位置/サイズが変更されたときに、ウィンドウが動的に調整されません。

どんな助けでも大歓迎です。

デザインを考えました。しかし、その実現可能性については確信が持てません。setBounds() を使用できます。しかし、タスク バーが調整または再配置されたときにフレームに通知する必要があります。方法はありますか?

4

2 に答える 2

0
final Point x = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();

タスクバーが変更されたかどうかを確認する別のスレッドを用意してください。その場合、サイズを更新します

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();
于 2013-10-28T10:28:32.703 に答える