問題: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中文網其他相關文章!