2010-02-22 6 views
0

J'ai un JPanel dans une boîte de dialogue. Un MouseListener écoute les mouvements de la souris, et lorsque la souris est sur un emplacement spécifique, j'appelle setCursor() sur le panneau pour changer le curseur.swing: réglage du curseur sur JDialog

Tout cela fonctionne bien, jusqu'à ce que j'ouvre un autre dialogue à partir de ce dialogue et le ferme à nouveau. (Par exemple: un message d'avertissement (JOptionPane), ou un nouveau client JDialog Après cette action, le curseur ne change plus, bien que j'appelle toujours 'setCursor'

Quelqu'un peut-il avoir une idée de ce qui se passe? qui?

Répondre

0

J'ai trouvé la solution: le problème était que j'avais 1 trame et 1 boîte de dialogue. Le cadre est le cadre principal, le dialogue est créé par la suite. De la boîte de dialogue, j'appelle new JDialog(null, "title"); Au lieu d'utiliser null, j'aurais dû ajouter la boîte de dialogue d'appel, car après avoir fermé la boîte de dialogue, le focus est passé sur le cadre principal, mais sur mon mac il semblait que le focus était sur le dialogue.

+0

En résumé: la fermeture d'une boîte de dialogue rendra le focus à son parent.Si aucun parent n'est défini, il revient à l'image principale.Bon à savoir.Je pense par 'focus' vous signifie le focus d'entrée, pas le focus de la souris. – FaithReaper

2

J'ai essayé ce qui suit et il a bien fonctionné, aussi après avoir affiché une autre JDialog (sous Windows, JDK 1.6.0_12).

curseur de la souris change tous les 50 pixels dans le sens horizontal, en cliquant sur le JPanel ouvre un modal JDialog Refermer le curseur de la souris et le curseur de la souris change encore

public class DialogCursorTest extends JDialog{ 
    public DialogCursorTest() { 
     final JPanel panel = new JPanel(); 
     panel.addMouseMotionListener(new MouseMotionAdapter() { 
      Cursor handCursor = new Cursor(Cursor.HAND_CURSOR); 
      @Override 
      public void mouseMoved(MouseEvent e) { 
       if(e.getX() % 100 > 50) { 
        if(panel.getCursor() != handCursor) { 
         panel.setCursor(handCursor); 
        } 
       } 
       else { 
        if(panel.getCursor() == handCursor) { 
         panel.setCursor(Cursor.getDefaultCursor()); 
        } 
       } 
      } 
     }); 

     panel.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       new JDialog(DialogCursorTest.this, "Test", true).setVisible(true); 
      } 
     }); 

     getContentPane().add(panel); 
    } 

    public static void main(String[] args) { 
     DialogCursorTest test = new DialogCursorTest(); 
     test.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     test.setSize(400, 300); 
     test.setVisible(true); 
    } 
} 
+0

Fonctionne pour moi aussi, je vais le tester ce soir sur mon mac. Et essayez de savoir quelle est la différence :( – Fortega

Questions connexes