首頁 >Java >java教程 >為什麼我的 Java Swing 等待遊標並不總是正確顯示,如何使用玻璃窗格修復它?

為什麼我的 Java Swing 等待遊標並不總是正確顯示,如何使用玻璃窗格修復它?

Susan Sarandon
Susan Sarandon原創
2024-12-03 17:23:10581瀏覽

Why Does My Java Swing Wait Cursor Not Always Display Correctly, and How Can I Fix It Using the Glass Pane?

問題:Java 中等待遊標顯示問題

在Java Swing 庫中,為組件設定遊標並不總是生效當存在帶帶有自訂遊標的巢狀面板時。這可能會導致遊標行為不一致,等待遊標未如預期顯示。

修正:利用玻璃窗格進行遊標控制

要解決此問題,建議使用包含組件的框架的玻璃窗格來管理遊標顯示。玻璃窗格是位於框架層次結構頂層的透明窗格。透過將遊標設定在玻璃窗格上,框架內的任何組件都可以顯示等待遊標,無論其自身的遊標設定為何。

修改的程式碼解決方案:

以下修改後的程式碼示範如何使用玻璃窗格來顯示等待遊標:

import java.awt.*;
import java.awt.event.*;
import java.util.TimerTask;
import java.util.Timer;

public class BusyCursorTest extends javax.swing.JFrame {

    private javax.swing.JPanel cursorPanel = null;

    public BusyCursorTest() {

        // ...

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

        // ...
    }

    // ...

    public static java.awt.Cursor originalCursor = null;

    private static final java.awt.event.MouseAdapter mouseAdapter = new java.awt.event.MouseAdapter() {
    };

    public static final int DELAY_MS = 250;
}

在此修改後的程式碼中,startWaitCursor() 和stopWaitCursor() 方法用於管理框架玻璃窗格上的遊標。這可以確保無論嵌套組件的遊標設定如何,等待遊標都會一致顯示。

以上是為什麼我的 Java Swing 等待遊標並不總是正確顯示,如何使用玻璃窗格修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn