4.5.9 (Dec 2007)
Java 版の改良
ポップアップの変更
概要
MR版リリースの目的のひとつとして、ポップアップの改良がある。ここでは、特定のアクションのあとにつづく、イベントの順序についてアウトラインを示 す。以下にあげる、不具合はコンテキストメニューとしてポップアップ(popup)とポップアップメニュー(popupMenu)を利用した場合に起きる いくつかの問題を示している。(修正されたすべての項目については、4.5.9MRに付属するリストを参照)
8694 | popupMenuを閉じたあとのフォーカス遷移の異常 |
8695 | popupMenu を閉じたあとにonBeforeActiveLostイベントが発生しない |
8696 | popup をクローズしたときonBeforeActiveLostイベントがいつも発生する |
8794 | popup を表示したときにpopup にフォーカスが遷移しない– popupMenuの異常 |
8871 | 712-5181390 712-5233153 – 他のUIウィジェットにフォーカスが移っても popupMenu が閉じない |
ポップアップ(popup)とポップアップメニュー(popupMenu)についての新しい機能と、イベントの発生順序についての重要な点を以下に説明する。
イベントハンドラの処理の改変
イベントハンドラの処理を改変した。シンタックスが間違っていても(例えば、コンテナと呼び出し処理のあいだにスペースが配置されるなど)これまでは(無視して)動作させていたが、このMR版では動作しないようにした。エラー出力もあわせて改変した。
コンポーネントでの右ボタンクリックとコンテキストボップアップの表示
ポップアップ(popup)とポップアップメニュー(popupMenu)についてイベント発生の順序は次のとおり。
1. onBeforeActiveLost が発生する(コンポーネントで右ボタンをクリックしたとき)
2. onActiveLost が発生する
3. onActiveGained がコンテキストポップアップで発生する(popup、popupMenuのどちらでも発生する)
注記:
- The onBeforeActiveLost() によってpopup やpopupMenuが表示されるまえに、選択されているウィジェットに関連したバリデーションを行うことができる
- コンテキストポップアップでのactiveGained イベントによってフォーカスをどのウィジェットにも遷移させることができる
- 呼び出しもと(invoker)からもフォーカスは遷移する。例えば、textField でテキストを選択していても選択状態が解除される。バグ番号8794では、選択状態が保持されないことについて報告されていたが、これは textField のtextSelectionPolicy属性を"always"に設定することで実現できる
popupMenuのmenuItemの選択
イベントの発生順序は次のとおり。
1. popup でonBeforeActiveLost が発生する
2. popup でonActiveLost が発生する
3. 呼び出しもと(invoker)でonActiveGained が発生する
コンテキストポップアップの境界の外でクリックされたとき
イベントの発生順序は次のとおり。
1. popup でonBeforeActiveLost が発生する
2. popup でonActiveLost が発生する
3. フォーカスが遷移できるウィジェットが選択された場合、onActiveGained が発生する
このイベント発生の順序では、textFieldでクリックしコンテキストポップアップが表示された場合、ポップアップが消えても textField はフォーカスを取得し選択された状態となる。このイベントの順序はPlatform 4.5.9で改変されたため、これより前のバージョンでは、textField を選択するために、ポップアップが消すために一度クリックし、textField を選択するためもう一度クリックする必要があった。
popupMenuが表示されている状態でエスケープキーが押された場合
popupMenuのイベントの発生順序は次のとおり。
1. popup でonBeforeActiveLost が発生する
2. popup でonActiveLost が発生する
3. 呼び出しもと(invoker)でonActiveGained が発生する
popup
コンテキストポップアップとしてpopupが定義されている場合、エスケープキーが押されたとき、Platform 4.5.9より前のバージョンでは、なにも起こらなかったが、Platform 4.5.9では、つぎのような動作となる。
1. エスケープキーが押されたとき、最初にフォーカスを得たウィジェットがエスケープキーをハンドリングすることができる
2. フォーカスを得たウィジェットがイベントをハンドリングしないとき、次のイベントの発生しpopupはクローズする。
· popup でonBeforeActiveLost が発生する
· popup でonActiveLost が発生する
· 呼び出しもと(invoker)でonActiveGained が発生する
コンテキストポップアップが表示されている状態でタブキーが押された場合
popupMenu
コンテキストポップアップとしてpoupMenuが定義されている場合、タブキーが押されたとき、なにも起こらない。これは、望ましい動作と考えられる。
popup
Platform 4.5.9より前のバージョンではpopupは、タブキーを押した場合フォーカスが他のウィジェットに遷移していた。この問題は、バグ番号8871として 報告されていた。4.5.9 では、popupが表示されているときにタブキーが押されてもフォーカスはpopupに保持されるよう修正された。
メニューバーのメニュー
問題点
4.5.9より前のバージョンでは、フォーカスマネージャで定義された動作としてmenuItemを選択するとフォーカスは次のウィジェットに遷移してい た。しかし、この動作は混乱をまねくことがあった。4.5.9では、メニューの呼び出しもと(invoker)のウィジェットの次の遷移先にフォーカスが 移るようになった。
注記:
menuBarはデフォルトではフォーカス遷移しないため、上記の動作ではクライアントのパネルにフォーカスが遷移する。menuBarにフォーカスを遷 移させるには、menuBar をfocusableにするか、menuBarをfocusable であるpanelに配置する。デフォルトではmenuBarはfocusableではない。このような設定はアプリケーションのアクセシビリティのために 行われる。
サブコンポーネントのコンテキストポップアップ
問題点
4.5.9より前のバージョンでは、サブコンポーネント(tableのheaderやcolumnなどがサブコンポーネント)のコンテキストポップアップに問題があった。4.5.9では、次の遷移先のウィジェットにフォーカスが移るようになった。
修正
menuBar と同様に、メニューの呼び出しもと(invoker)のウィジェットの次の遷移先にフォーカスが移るようになった。headerやcolumnのコンテキストポップアップでは、tableにフォーカスが移る。
Java 版での改良
マウスの右ボタンをクリックした場合の振る舞いの選択
マウスの右ボタンをクリックした場合の振る舞いとして、つぎの点が改良された。
- 選択したcell、row、columnでマウスの右ボタンをクリックした場合、選択状態を変えずコンテキストポップアップを表示する。コントロールキーやシフトキーが押されていても同様である。
- 選択されているウィジェットの外でマウスの右ボタンをクリックした場合、クリックした場所にあるcell、rowあるいはcolumnが選択されコンテキストメニューが表示される。
- コントロールキーを押してマウスの右ボタンをクリックした場合、あるいはシフトキーを押してマウスの右ボタンをクリックした場合、クリックした場所にあるcell、rowあるいはcolumn を選択中のウィジェットとして追加する。
comboBoxのwidthの設定が有効となる
comboBoxのwidthを設定した場合、リストアイテムのコンテンツの長さに影響されず設定した値が有効となる。
window でcentered="true" を指定した場合の改良
window でcentered="true" を指定した場合、windowが描画されるときに中央に再配置されることがなくなった。
table (XAL) でのヘビーウエイトコンポーネントのスタイルが改良された
table でのヘビーウエイトコンポーネントのスタイル(fontやbackground color)が正しく描画されるようになった。この問題は、XAL で発生していた。
onMouseDrag のサポート
onMouseDrag がpanel、widget、cell、listItemなどのウィジェットで利用できるようになった。
dialog やwindow のリサイズについての注記
dialogやwindowなどコンテナウィジェットでpanelが表示される場合、panelの内容を表示するため自動的にリサイズされる。コンテナ ウィジェットのリサイズを手動(マウス)で行った場合、表示されていないpanelが表示されるとき(panelが自動的にリサイズされる前に)、コンテ ナは自動的にリサイズされない。これは、panelが表示されるときにユーザが指定したリサイズが自動的なリサイズより優先されることになり、動作して正 しい。 このため、アプリケーションでpanelを表示するときに適切にリサイズされるにはresizable=”false”とする必要がある。こうす ることで、ユーザがコンテナをリサイズできなくなり、コンテナはつねにアプリケーションの仕様どおり自動的にリサイズされることになる。
XAL ではlistItem とrowのheight で"px" がサポートされた
XAL を利用する場合、listItem とrowのheight に"px" が指定できるようになった。
Ctrl-X でonTextChange イベントが生成される
onTextChange イベントがCtrl-X (テキストの切り取り) で生成されるようになった。
イベントをスタイルシートに保存することができる
スタイルシートのエレメントにイベントを追加することができる。
例:
stylesheet.xss:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <styleSheet> <style applyTo="cell"> <normal fontItalic="true" onCreate="macro://addRow.execute('Create')" onDoubleClick="macro://addRow.execute('DoubleClick')" onMouseDown="macro://addRow.execute('MouseDown')" onMouseUp="macro://addRow.execute('MouseUp')"/> </style> </styleSheet>
table内のcellのコンテンツを垂直に配置できるようになった
table内のcellのコンテンツを垂直に配置できるようになった。属性名は、"alignVertical" (NXML)と"verticalAlignment" (XAL)で、値は"top|bottom|center"を指定する。詳細については、スキーマ定義のドキュメントに記載している。
回避策
管理番号8851 - AttributeChangeListener による情報の更新でServerDOMが同期しない
つぎのクラス(ドキュメント化はされていないクラス) を利用してこの問題を回避できる。com.nexaweb.client.xml.ThreadBasedSynchronizer
UI DOMが更新される部分を、”push synchronization”と”pop synchronizations”で囲む。pushのあとに必ずpopを呼ぶ必要がある。
例:
public void onAttributeSet(AttributeChangeEvent arg0) { try { ThreadBasedSynchronizer.pushSynchronizationState(true); // change some attributes... } finally { ThreadBasedSynchronizer.popSynchronizationState(true); } }
修正された不具合(Java)
6882 | クライアント: table row height に"px"を指定しても有効にならない |
7004 | 712-3701912 - on drop down list のscrollbarでなにも表示しない |
7711 | quickEdit が指定されたtableで、エディターとして指定したcomboBoxで選択した値が表示されない |
7955 | cell とlistItem でスタイルが有効とならない |
7972 | cell のalignVertical 属性が機能しない |
7973 | スタイルシートのエレメントにイベントが設定できない |
8026 | rowの位置を変更するとNullPointerExceptionが発生する |
8032 | quickEdit が指定されたtableで、エディターとして指定したcomboBoxで選択した値がcellに反映されない |
8234 | チャイルドペインのサイズを変更しても、dialogのwidth とheightが自動的に更新されない。 |
8350 | Ctrl+X でテキストを切り取り編集してもonTextChange イベントが発生しない |
8351 | menuItemを選択した後、マウスホイールが正常に動作しなくなる |
8369 | "selectedStyle"を持つエレメントがUI Documentに追加されたときNullPointerExceptionが発生する |
8448 | 712-4905380 - listItem のheightに"px"が指定されたとき、InvalidXmlExceptionが発生する |
8639 | onBeforeActiveLostのハンドラでsetTextを使ったとき、コミットしていない状態のIMEのテキストがクリアされない |
8694 | popupMenuをクローズしたあとのフォーカスの遷移がおかしい |
8695 | popupMenu をクローズしたあとonBeforeActiveLostイベントが発生しない |
8696 | popup がクローズしたとき, onBeforeActiveLost イベントが常に発生する |
8707 | lockedColumnがtreeTable で指定されたとき、ツリーが展開できない |
8715 | Undo/RedoでonTextChangeイベントが発生しない |
8727 | macroやXModifyでtableを更新したときテキストが表示されない |
8787 | 712-5056583 - onMouseDrag イベントがスキーマドキュメントにない |
8793 | tableでcell以外のウィジェットのスタイルが正しく反映されない |
8794 | popup を表示したときフォーカスが取得できない- popupMenuの動作と矛盾する |
8795 | gridPane (gridLayout) で"gridColumnSpan"を設定した場合、必要ないスペースが表示される |
8822 | 712-5072564 - horizontalFlowPane でペアレントとなるウィジェットが垂直に並ばない |
8827 | FocusServiceのgetCurrentFocus() でcomboBox が取得できない |
8836 | comboBox にフォーカスが遷移したとき、buttonのonCommand イベントがaccessKey で複数回呼び出される |
8837 | comboBoxにフォーカスが遷移したあと、マウスホイールが正常に動作しない |
8839 | treeTable でマウスがはなれたあともlinkの色が元に戻らない |
8851 | AttributeChangeListenerで更新された内容が、ServerDOMに同期されない |
8855 | サーバからのレスポンスでクライアントのDOMが更新されたあと、その内容がServerDOMに同期されない |
8858 | comboBox でwidth 属性を設定しても反映されない |
8863 | treetable でlockedColumnを指定するとツリーが展開されない |
8871 | 712-5181390 712-5233153 - popMenu 表示後、フォーカスが他のUIウィジェットに遷移してもpopMenuが閉じない |
8993 | 712-5328616 - 右ボタンクリックで選択状態となる |
9019 | ペインを再描画するとwindow が中央に再配置される |