2010-02-22 3 views
0

У меня есть JPanel внутри диалогового окна. MouseListener прослушивает движения мыши, и когда мышь находится в определенном месте, я вызываю setCursor() на панели, чтобы изменить курсор.swing: установка курсора на JDialog

Это все работает хорошо, пока я не открою еще один диалог из этого диалогового окна и не закрою его снова. (Например: предупреждающее сообщение (JOptionPane) или новый cudommade JDialog. После этого действия курсор не изменяется снова, хотя я все еще вызываю «setCursor».

Кто-нибудь знает, что происходит? что?

ответ

0

Я нашел решение: проблема была у меня было 1 кадр и 1 диалог. Кадр является основным фреймом, диалог создается впоследствии. В диалоговом окне я вызываю new JDialog(null, "title"); Вместо того, чтобы использовать null, я должен был добавить диалоговое окно вызова, потому что после закрытия диалога основное внимание было обращено на основной фрейм, хотя на моем mac это выглядело так, что фокус был на диалоге. .

+0

В заключение: закрытие диалога приведет к возврату фокуса к его родительскому объекту. Если родитель не определен, он возвращается к основному фрейму. Полезно знать. Я думаю, что 'focus' вы означает фокус ввода, а не фокус мыши. – FaithReaper

2

Я попытался следующее, и она работала хорошо, и после отображения другого JDialog (на Windows, JDK 1.6.0_12).

курсора мыши меняется каждые 50 пикселей в горизонтальном направлении, нажав JPanel открывает модальный JDialog. Закройте его снова и курсор мыши все еще изменяется.

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

Работает для меня тоже, я провешу его сегодня вечером на моем mac. И попытайтесь выяснить, в чем разница :( – Fortega

Смежные вопросы