ホームページ >Java >&#&チュートリアル >カスタム カーソルを使用すると Java 待機カーソルが表示されないのはなぜですか?

カスタム カーソルを使用すると Java 待機カーソルが表示されないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 13:07:14366ブラウズ

Why Doesn't My Java Wait Cursor Show When Using a Custom Cursor?

Java 待機カーソル表示の問題

問題の概要

Java アプリケーションでは、待機カスタム カーソルのあるパネル上にマウスを置くと、カーソルが正しく表示されません。パネルがカーソルを変更しない場合、待機カーソルは期待どおりに表示されます。

分析

主な問題は、待機カーソルがマウスイベントが発生するコンポーネント。この場合、マウスがカスタム カーソルのあるパネル上にあると、待機カーソルがそのパネルに設定されるため、パネルのカーソルによって隠されます。

推奨される回避策

この問題を回避し、待機カーソルが正しく表示されるようにするには、待機状態をトリガーするコンポーネントを含むフレームのガラス枠に待機カーソルを設定することをお勧めします。ガラス板は、フレーム内の他のすべてのコンポーネントの上に位置する透明なレイヤーです。

実装

修正 SSCE:

次の変更された SSCE は、待機カーソルをglasspane:

public class BusyCursorTest extends javax.swing.JFrame {

    // ...

    private static void startWaitCursor(javax.swing.JFrame frame) {
        frame.getGlassPane().setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));
        frame.getGlassPane().addMouseListener(mouseAdapter);
        frame.getGlassPane().setVisible(true);
    }

    private static void stopWaitCursor(javax.swing.JFrame frame) {
        frame.getGlassPane().setCursor(originalCursor);
        frame.getGlassPane().removeMouseListener(mouseAdapter);
        frame.getGlassPane().setVisible(false);
    }

    // ...

}

このアプローチの利点:

  • このアプローチにより、カーソル設定に関係なく、必要なときに待機カーソルが常に表示されるようになります。フレーム内の任意のコンポーネント。
  • どのパネルが最前面にあるか、またはイベントが最前線にあるかどうかを追跡する必要がなくなります。マウスのクリックによってトリガーされます。
  • これは、トップレベルのコンテナー レベルで待機カーソルの動作を変更するための集中ソリューションを提供します。

以上がカスタム カーソルを使用すると Java 待機カーソルが表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。