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

Java 待機カーソルがカスタム カーソルの上に表示されないのはなぜですか?

Linda Hamilton
リリース: 2024-11-24 19:31:13
オリジナル
843 人が閲覧しました

Why Doesn't My Java Wait Cursor Appear Over Custom Cursors?

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

問題:

で待機カーソルを表示する場合Java アプリケーションでは、独自のカーソルを定義するパネル上にマウスが置かれている場合、カーソルは表示されません。この問題は、提供されているサンプル自己完結型実行可能ファイル (SSCE) で示されています。

原因:

Java の待機カーソルのデフォルト実装は、直接設定されたカーソルにのみ影響します。コンポーネント。カスタム カーソルを持つパネルが優先され、待機カーソルがオーバーライドされます。

解決策:

これを解決するには、待機カーソルを、表示しようとしているコンポーネント

実装:

  1. 次のアクション リスナーを作成します。

    • 待機を設定するタスクをスケジュールします。指定された遅延後のカーソル。
    • その後、元のアクション リスナーを実行します。遅延。
  2. アクション リスナーがトリガーされたとき:

    • JFrame のガラス枠に待機カーソルを設定します。
    • マウス アダプターをガラス板に接続して、マウス イベントが基礎となるコンポーネントに到達するのを防ぎます。
    • ガラス窓が表示されます。
  3. タイマー タスクが完了すると:

    • 元のカーソルを JFrame に戻します。
    • マウスを削除しますアダプターをガラス板から取り外します。
    • glasspane.

修正された SSCE:

修正された SSCE には、パネルがカスタム設定されている場合でも待機カーソルが表示されるようにするためのこれらの変更が組み込まれています。カーソル:

public class BusyCursorTest extends javax.swing.JFrame {

    private javax.swing.JPanel cursorPanel = null;

    // ... (remaining code)

    public static void main(String[] args) {
        new BusyCursorTest();
    }

    public static java.awt.event.ActionListener getActionListener(final javax.swing.JFrame frame,
        final java.awt.event.ActionListener originalActionListener) {

        java.awt.event.ActionListener actionListener = new java.awt.event.ActionListener() {

            public void actionPerformed(final java.awt.event.ActionEvent e) {

                java.util.TimerTask timerTask = new java.util.TimerTask() {

                    public void run() {
                        originalCursor = frame.getCursor();
                        startWaitCursor(frame);
                    }

                };
                java.util.Timer timer = new java.util.Timer();

                try {
                    timer.schedule(timerTask, DELAY_MS);
                    originalActionListener.actionPerformed(e);
                } finally {
                    timer.cancel();
                    stopWaitCursor(frame);
                }
            }

        };
        return actionListener;
    }

    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);
    }

    // ... (remaining code)
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート