Java GUI - Wait Cursor
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Java GUI - Wait Cursor
Безрезультатно набродившись по аглицким форумам возвращаюсь сюда с тем же вопросом. Полный ступор у меня с этой проблемой. Хоть бы знать в каком направлении копать...
I have wait cursor set in action_Performed as:
mLoginDialog.startWaitCursor(mLoginDialog.getRootPane());
where
/** Sets cursor for specified component to Wait cursor */
public static void startWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(WAIT_CURSOR);
root.getGlassPane().setVisible(true);
}
/** Sets cursor for specified component to normal cursor */
public static void stopWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(DEFAULT_CURSOR);
root.getGlassPane().setVisible(false);
}
When I click the action button, I see default wait cursor (hourglass) no problem. But if I move mouse outside this frame and then move it back, cursor changes to one of the resize cursor, so it looks like either horizontal or vertical 2 point arrow.
I wonder why this is happening and how can I avoid it?
Сабина
I have wait cursor set in action_Performed as:
mLoginDialog.startWaitCursor(mLoginDialog.getRootPane());
where
/** Sets cursor for specified component to Wait cursor */
public static void startWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(WAIT_CURSOR);
root.getGlassPane().setVisible(true);
}
/** Sets cursor for specified component to normal cursor */
public static void stopWaitCursor(JComponent component) {
RootPaneContainer root =
(RootPaneContainer)component.getTopLevelAncestor();
root.getGlassPane().setCursor(DEFAULT_CURSOR);
root.getGlassPane().setVisible(false);
}
When I click the action button, I see default wait cursor (hourglass) no problem. But if I move mouse outside this frame and then move it back, cursor changes to one of the resize cursor, so it looks like either horizontal or vertical 2 point arrow.
I wonder why this is happening and how can I avoid it?
Сабина
-
- Уже с Приветом
- Posts: 1243
- Joined: 09 Sep 2003 18:31
Re: Java GUI - Wait Cursor
Sabina wrote:I wonder why this is happening and how can I avoid it?
Try
Code: Select all
public void startWaitCursor(Component component) {
SwingUtilities.getWindowAncestor(component).setCursor(
Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
public void stopWaitCursor(Component component) {
SwingUtilities.getWindowAncestor(component).setCursor(
Cursor.getDefaultCursor());
}
Works with JDK 1.3.1 and 1.4.1
PS: а naming conventions (action_Performed, mLoginDialog) из предыдущего опыта или так в школах сейчас учат?
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Java GUI - Wait Cursor
OO8 wrote:TryCode: Select all
public void startWaitCursor(Component component) {
SwingUtilities.getWindowAncestor(component).setCursor(
....
Не помогает. Я думаю it has something to do with dialog and action being separated.
OO8 wrote:PS: а naming conventions (action_Performed, mLoginDialog) из предыдущего опыта или так в школах сейчас учат?
В школе учат "actionPerformed" - это я тут почему-то с underscore напечатала, видать под влиянием кучи переименованных накануне файлов
Что касается mLoginDialog - наверное так и учат, по крайней мере учили года 3 назад в University of California, Santa Barbara (не меня! )
Cабина
PS. А вообще персональное огромное спасибо за попытку мне помочь. Вы - первый из всего Интернет сообщества с момента оглашения этой проблемы
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Java GUI - Wait Cursor
Looks like I am not alone...http://forum.java.sun.com/thread.jsp?thread=482499&forum=57&message=2251482
Cогласно вот этой статьео курсорах и модальных диалогах, мне нужно сажать курсор на родителя (Owner frame) mLoginDialog
Но в моей ситуации это LoginDialog, то есть у него нет Valid Parent.
Это первый диалог, который инициализируется из LaunchApplication Action.
Уф, короче.
Сабина
Cогласно вот этой статьео курсорах и модальных диалогах, мне нужно сажать курсор на родителя (Owner frame) mLoginDialog
Но в моей ситуации это LoginDialog, то есть у него нет Valid Parent.
Это первый диалог, который инициализируется из LaunchApplication Action.
Уф, короче.
Сабина
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Java GUI - Wait Cursor
Вот оно первое разочарование в Джаве ..
Обычный wait cursor на обычном логин скрине вот с таким вот гимором http://forum.java.sun.com/thread.jsp?thread=482499&forum=57&message=2251482 ?
Сабина
Обычный wait cursor на обычном логин скрине вот с таким вот гимором http://forum.java.sun.com/thread.jsp?thread=482499&forum=57&message=2251482 ?
Сабина
-
- Уже с Приветом
- Posts: 1243
- Joined: 09 Sep 2003 18:31
Re: Java GUI - Wait Cursor
Sabina wrote:Не помогает. Я думаю it has something to do with dialog and action being separated.
Вообще-то я это для модального диалога тоже проверил.
А Вы случайно не в AWT event thread пытаетесь логиниться? Например
Code: Select all
LoginDialog...
public void actionPerformed(ActionEvent e) {
startWaitCursor(this);
// blocking call
doLogin();
stopWaitCursor(this);
}
Если так, то неудиветльно что курсор не перерисовывается.
Rule of thumb: don't make any blocking calls (for example, network I/O ) from AWT event dispatch thread. See Threads and Swing.
Если делать вот так, то все должно работать.
Code: Select all
LoginDialog...
public void actionPerformed(ActionEvent e) {
Thread loginThread = new Thread(new Runnable() {
public void run() {
// blocking call
doLogin();
// restore cursor
SwingUtilities.invokeLater(new Runnable() {
public void run() {
stopWaitCursor(this);
}
});
}
});
startWaitCursor(this);
loginThread.start();
}
А "решение" которое Вы нашли выкиньте. Можно конечно и через ммм... и так делать, но тогда разочарований в Java будет очень много.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Java GUI - Wait Cursor
OO8 wrote:.......
А Вы случайно не в AWT event thread пытаетесь логиниться? Например
.....
Если так, то неудиветльно что курсор не перерисовывается.
Rule of thumb: don't make any blocking calls (for example, network I/O ) from AWT event dispatch thread. See Threads and Swing.
......А "решение" которое Вы нашли выкиньте. Можно конечно и через ммм... и так делать, но тогда разочарований в Java будет очень много.
Спасибо, что не дали разочароваться
Сабина