Java 等待光标显示问题
问题:
在中显示等待光标时在 Java 应用程序中,如果鼠标位于定义了自己的光标的面板上,则光标不会出现。此问题在提供的示例自包含可执行文件 (SSCE) 中进行了演示。
原因:
Java 等待游标的默认实现仅影响直接设置在组件。具有自定义光标的面板优先,覆盖等待光标。
解决方案:
要解决此问题,应将等待光标设置在包含的 JFrame 的玻璃窗格上寻求显示的组件
实现:
创建一个动作监听器:
触发动作侦听器时:
定时器任务完成时:
修改后的 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中文网其他相关文章!