- PR -

Swingアプリを最前面に表示

投稿者投稿内容
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-07-28 18:30
こんにちわ

ちなみに、Window.toFront()説明として、次のように書かれているので、
所望の挙動をtoFront()から得ることは不可能でしょう

引用:

Places this Window at the top of the stacking order and shows it in
front of any other Windows in this VM. No action will take place is this
Window is not visible. Some platforms do not allow Windows which own
other Windows to appear on top of those owned Windows. Some platforms
may not permit this VM to place its Windows above windows of native
applications, or Windows of other VMs. This permission may depend on
whether a Window in this VM is already focused. Every attempt will be
made to move this Window as high as possible in the stacking order;
however, developers should not assume that this method will move this
Window above all other windows in every situation.



また、そもそも、プログラムが突然勝手にウインドウを最前面に持ってくることは、
human interface上よくないでしょう。

#そんなプログラム使ってて、びっくりします
Astmild
常連さん
会議室デビュー日: 2003/06/09
投稿数: 30
お住まい・勤務地: 大田区
投稿日時: 2003-07-28 20:37
こんにちは。

引用:

2.一定時間立つと自分自身を更新する仕組みになっているので、
その際に自分を最前列に表示するようにする。
(ここで toFront() を使ってみたのですがダメでした)


show()を使えば前面に来ます。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Window.html#show()
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-07-29 09:21
引用:

また、そもそも、プログラムが突然勝手にウインドウを最前面に持ってくることは、
human interface上よくないでしょう。

#そんなプログラム使ってて、びっくりします



なぜhuman interface上よくないと思いますか?
alerm したいときなどによく使いそうなものだと思いますが。

Some platforms
may not permit this VM to place its Windows above windows of native
applications, or Windows of other VMs.
の一文が気になる。。。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-07-29 09:26
引用:

Astmildさんの書き込み (2003-07-28 20:37) より:
show()を使えば前面に来ます。



これは動作的には toFront() と同じようです。
ソースを見ていませんが、toFront() を呼んでいるのではないでしょうか。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-07-29 09:51
引用:

なぜhuman interface上よくないと思いますか?
alerm したいときなどによく使いそうなものだと思いますが。



Alertをいきなり前面に出してくるアプリケーションを私は見たことがありません。
同一アプリ内で表示するのであれば問題ないと思いますが、他のアプリを使用していて
突然、Alertが出てくるのはまずいのではないかと思います。

たいていのOSには、backgroundで動いているアプリに何か起きた場合に、
通知する機構(Windowsならタスクバーに表示されたアイコン?が点滅する)
を使用すると思います。

わたしがメインで使用しているdebuggerであるJSwatの場合、break pointにhitすると、
タスクバーのアイコン?がハイライト化されます。

したがって、このような、通知機構が存在する、または別の方法で実装することができるのではないかと思います。(JSwatのsourceを読んでいないので、詳しいことは分かりません)
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-07-29 10:08
引用:

Alertをいきなり前面に出してくるアプリケーションを私は見たことがありません。



IP Messenger ではもろに前面に出てきます。
他にもよくあると思います。(今思い浮かびませんが)

引用:

同一アプリ内で表示するのであれば問題ないと思いますが、他のアプリを使用していて
突然、Alertが出てくるのはまずいのではないかと思います。



突然出るのはなぜまずいのでしょう?
alarm というのはそもそも何か急を知らせるような意味なので
使うとしたら当然そういう動きが有用なアプリでという事になるでしょうが。
mikan
ベテラン
会議室デビュー日: 2002/08/19
投稿数: 58
投稿日時: 2003-07-29 10:51
こんにちは、みかんです。
お話が脱線してしまっているような気がするのですが、ShinさんはSetWindowPos()でHWND_TOPMOSTにしたような状態を望まれているのですよね?
Java(Swing)アプリで可能なのかどうかは、私はわかりませんが、TOPMOSTなアプリケーションを作りたいと言う要望に対して、その必要性を問うのはどうかと思います。
この場は、できるかできないか、でいいのではないでしょうか?

*おまけ
HWND_TOPMOSTはSetWindowPos()をコールした時点での最前面、になるんでしょうかね。TOPMOSTなウインドウ同士でも重なり合いますが、それ以外のウインドウよりは上にいますから。
ということで、「常に最前面」「Always on Top」は正しくないなぁ。
#タスクマネージャはアクティブウインドウになったときにSetWindowPos()し直してるみたいなので、大体最前面、ですかね。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-07-29 11:05
こんにちは。

>Alertをいきなり前面に出してくるアプリケーションを私は見たことがありません。
緊急性を要するダイアログを、他のアプリケーションの上に表示させるのが、
問題とは思えませんが?

OSによっても、タスクバー(タスクトレイ)があるとは限らないし、確かにネットワーク
管理ツールで、異常時にタスクトレイ上のアイコンやタイトルバーが点滅するツールを実際
に使っていますが、はっきり言って気づかない事も多いです。物にもよるでしょうが、
ちまちま、点滅するより、ダイアログで(場合によってはボーンとビープ音付で)アラート
を表示するほうがUIとしては親切だと思うし、仕事上実際にユーザからもそういう風に
要望されることも多いです。

そもそもどんなOSでも、アプリケーションエラーがでると最前面にエラーダイアログが
でるし、(すべてかどうかはわかりませんけど)プリンタなんかでも紙切れやトナー切れ
なんかのエラーダイアログも最前面に出るし、「かずくん」さんの言われているUI上良く
ないという理由が良くわからない。


[ メッセージ編集済み 編集者: maru 編集日時 2003-07-29 11:15 ]

スキルアップ/キャリアアップ(JOB@IT)