سؤال

ولدي تطبيق سوينغ جافا، وضعت على نظام التشغيل Mac OS X 10.5 باستخدام جافا 1.5.

وأنا أحاول أن جعل مؤشر مخصصة تظهر عندما يقوم المستخدم بتحريك الماوس فوق بعض النص في الحوار. المؤشر لا يتغير أبدا، وإن كان.

وعندما كنت لا تستخدم JFrame بدلا من JDialog، المؤشر لا تغيير. ولكن بعد ذلك سيكون لديك لكتابة كافة التعليمات البرمجية الحوار نفسي.

وكيف يمكنني الحصول على المؤشر لتظهر؟

وهنا رمز أبسط I يمكن أن يخلق لعرض المشكلة:

import javax.swing.*;
import java.awt.*;

public class CursorTest {

    public static void main(String[] args) {
        JLabel label = new JLabel("Move mouse here for hand cursor");
        label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        JOptionPane pane = new JOptionPane(label);
        pane.setOptions(new Object[]{"OK"});

        JDialog dialog = pane.createDialog(null, "Test Dialog");
        dialog.setVisible(true);
    }
}
هل كانت مفيدة؟

المحلول

ويبدو أنه خطأ في جاوة 1.5: أود في البداية حاول مع جافا 1.6.0_07 وعملت كما هو متوقع (على Windows XP). ثم أنا معاد مع جافا 1.5.0_06 بل يبقى المؤشر في الحالة الافتراضية.

ومعرفة الصعوبات التي تواجه جافا 1.6 على ماك، وأرى أنه سيكون من الصعب تحديد ذلك ...

ID: 5079694 JDialog لا تحترم setCursor
يطلقونها على الحل ...

[تحرير] اختبار الحل:

public class CursorTest extends JFrame
{
  private CursorTest()
  {
  }

  private void ShowDialog()
  {
        JLabel label = new JLabel("Move mouse here for hand cursor");
        label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        JOptionPane pane = new JOptionPane(label);
        pane.setOptions(new Object[] { "OK" } );

        JDialog dialog = pane.createDialog(this, "Test Dialog");
        dialog.setVisible(true);
  }

  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        CursorTest testFrame = new CursorTest();
        testFrame.setTitle("Test GUI");
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        testFrame.setSize(500, 300);
        testFrame.setVisible(true);
        testFrame.ShowDialog();
      }
    });
  }
}

ويعمل بشكل جيد مع بلدي JDK والنظام.

نصائح أخرى

وبفضل PhiLho، أن الشمس تقرير الشوائب أعطاني الحل. المالك (الإطار الأصل) يجب أن تكون غير لاغية وعرض. للسجل، وهنا نسخة معدلة من بلدي على سبيل المثال التعليمات البرمجية التي <م> لا إظهار مؤشر اليد.

import javax.swing.*;
import java.awt.*;

public class CursorTest {

    public static void main(String[] args) {
        JLabel label = new JLabel("Move mouse here for hand cursor");
        label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        JOptionPane pane = new JOptionPane(label);
        pane.setOptions(new Object[]{"OK"});

        JFrame parent = new JFrame();
        parent.setVisible(true);
        JDialog dialog = pane.createDialog(parent, "Test Dialog");
        dialog.setModal(false);
        dialog.setVisible(true);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top