Rumah > Java > javaTutorial > teks badan

Mengapa Kursor Tunggu Java Saya Tidak Muncul Di Atas Kursor Tersuai?

Linda Hamilton
Lepaskan: 2024-11-24 19:31:13
asal
830 orang telah melayarinya

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

Masalah dengan Paparan Kursor Tunggu Java

Isu:

Apabila memaparkan kursor tunggu dalam aplikasi Java, kursor tidak muncul jika tetikus berada di atas panel yang mentakrifkan kursornya sendiri. Isu ini ditunjukkan dalam Sample Self-Contained Executable (SSCE) yang disediakan.

Punca:

Pelaksanaan lalai kursor tunggu Java hanya mempengaruhi kursor yang ditetapkan secara langsung komponen tersebut. Panel dengan kursor tersuai diutamakan, mengatasi kursor tunggu.

Penyelesaian:

Untuk membetulkannya, kursor tunggu hendaklah ditetapkan pada kaca kaca JFrame yang mengandungi komponen yang ingin dipaparkan ia.

Pelaksanaan:

  1. Buat pendengar tindakan yang:

    • Jadualkan tugas untuk menetapkan penantian kursor selepas kelewatan yang ditentukan.
    • Melaksanakan pendengar tindakan asal selepas kelewatan.
  2. Apabila pendengar tindakan dicetuskan:

    • Tetapkan kursor tunggu pada kaca kaca JFrame.
    • Tambahkan penyesuai tetikus ke kaca kaca untuk mengelakkan peristiwa tetikus daripada mencapai dasar komponen.
    • Jadikan kaca kaca kelihatan.
  3. Apabila tugas pemasa selesai:

    • Pulihkan kursor asal kepada JFrame .
    • Alih keluar penyesuai tetikus daripada kaca.
    • Sembunyikan kaca.

SSCE yang diubah suai:

SSCE yang diubah suai menggabungkan perubahan ini untuk memastikan kursor tunggu dipaparkan walaupun panel mempunyai kursor tersuai:

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)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Kursor Tunggu Java Saya Tidak Muncul Di Atas Kursor Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan