1

2番目の画面(タスクバーがない)でフレームを最大化すると、タスクバーがそこにある場合に予想されるほぼ境界になってしまうことに気づきました。

これがWindows7に切り替わったことに気づきました。以前、Vistaには、両方の画面にタスクバーを追加するユーティリティがありました。そうでない場合は、これも問題になっている可能性があります。私が試したいくつかのウィンドウマネージャーでは、これはLinuxでは問題にならなかったと確信しています...

デフォルトのLAFを使用してプログラムを実行すると、適切な動作が示されます(画面の水平方向のスペース全体を使用)。StackOverflowは、Substanceのバグレポートを提出するのに最適な場所ではないと思いますが、誰かが解決策を提案したり、それが本当にバグであることを確認して、それが発生する状況を特定するのに役立つ場合は、大いに感謝します。

編集:私はソースコードを少し掘り下げていて、問題213への参照をいくつか見つけました。正確には、私が現在経験している欠陥です。これは、当時(2007年に)修正されたと思われ、最新のビルド(4.1)を使用してXPおよびVistaで正しく機能していると報告されています。ある時点で、関連するコードのビットをデバッグしようとするかもしれません。かなり扱いやすいように見えます。

/タンブルウィード

4

1 に答える 1

1

Substance LaF でのみ発生している場合は、間違いなくバグのように聞こえますが、報告する必要があります... しかし、投稿する前にあなたの編集を見ました. 4年後に修正するように説得して頑張ってください!

それまでの間、試すことができる唯一の実際の回避策は、現在のディスプレイのインセットを取得し、そのようにサイズを設定することです. 解像度、境界、および各モニターで使用可能なスペースの量を計算するコードを次に示します。

 public static void main(String... args) throws Exception {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gds = ge.getScreenDevices();
        for (GraphicsDevice gd : gds) {
            GraphicsConfiguration gc = gd.getDefaultConfiguration();
            System.out.println("Bounds = " + gc.getBounds());
            System.out.println("Insets = " + Toolkit.getDefaultToolkit().getScreenInsets(gc));
        }
    }

私のようなデュアルスクリーンの Windows セットアップでは、次のように表示されます。

境界 = java.awt.Rectangle[x=0,y=0,幅=1280,高さ=1024]
Insets = java.awt.Insets[上=0、左=0、下=30、右=0]
境界 = java.awt.Rectangle[x=1280,y=0,幅=1280,高さ=1024]
Insets = java.awt.Insets[上=0、左=0、下=0、右=0]

モニター 1 の下部にある 30 ピクセルのインセットに注目してください。

あとは、アプリケーションが実行されている画面を特定するだけです。Window.getGraphicsConfiguration()アプリケーション ウィンドウが の 、JFrameまたはその他のサブクラスである場合、これを使用して、アクティブな画面のグラフィックス構成を取得できますWindow

それがお役に立てば幸いです (そして、Substance バグに取り組んでいる人々の助けになるかもしれません!)

于 2011-03-17T14:57:45.757 に答える