2010-10-02 22 views
1

je crée le curseur sur commande avec le code en bas:Java - curseur personnalisé est différent dans différents systèmes d'exploitation

Toolkit toolkit = Toolkit.getDefaultToolkit(); 
Image image = toolkit.getImage("C:/Users/Administrator/Desktop/gaea/core/ui/gaeawindow/src/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif"); 

// Somewhere in mouse pressed action 

public void mousePressed(MouseEvent e) 
    { 
     Cursor cursor = toolkit.createCustomCursor(imageClose, new Point(12,12), "Hand"); 
     e.getComponent().setCursor(cursor); 
    } 

Le curseur est affiché sur Mac comme il devrait être, mais dans émulé Windows 7, il n'est pas. C'est montré augmenté et c'est moche.

Quel correctif dois-je appliquer à mon code pour résoudre ce problème? Est-ce un problème commun?

+0

"Émulé"? Voulez-vous dire Parallel Desktop ou quelque chose? –

+0

Oui je veux dire dans Parallels. – Ivansek

Répondre

0

Probablement émulé Windows 7 ne peut pas trouver le fichier image. Vous devez déplacer le fichier image dans classpath, à côté de vos fichiers java, afin que vous puissiez charger ce fichier avec getClass(). GetResource().

Il devrait fonctionner à la fois sur Windows 7 et sur Mac.

public class CursorTest extends JFrame { 
    public CursorTest() { 

     Toolkit toolkit = Toolkit.getDefaultToolkit(); 
     URL url = getClass().getResource("/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif"); 

     Image image = null; 
     try { 
      image = ImageIO.read(url.openStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Cursor cursor = toolkit.createCustomCursor(image, new Point(12, 12), 
       "Hand"); 
     setCursor(cursor); 

     setSize(new Dimension(200, 200)); 
     setVisible(true); 
    } 
} 
1

Le problème est que Windows veut des curseurs 32x32 et mettra à l'échelle votre image si ce n'est pas le cas. Le Mac est plus flexible.

La solution la plus simple consiste à placer vos curseurs 16x16 existants sur 32x32 avec des pixels transparents; Cela fonctionnera ensuite sur les deux plates-formes.

Vous pouvez utiliser

Toolkit.getDefaultToolkit().getBestCursorSize(w,h) 

pour voir si une taille donnée est prise en charge. Pour plus d'informations, voir: http://forums.sun.com/thread.jspa?threadID=5424409 qui a également un lien vers le site MS.