Java Improvement版の改良
...
ポップアップの変更
Overview
One of the goals of this MR is to bring consistency to the use of popups. This section outlines the order of events that occur after a particular action. The following bugs identify several areas of inconsistencies with the use of the popups and popupMenus as context popups that were addressed in this maintenance release. (See the end of this 4.5.9 MR note for a full list of fixed defects.)
...
概要
MR版リリースの目的のひとつとして、ポップアップの改良がある。ここでは、特定のアクションのあとにつづく、イベントの順序についてアウトラインを示 す。以下にあげる、不具合はコンテキストメニューとしてポップアップ(popup)とポップアップメニュー(popupMenu)を利用した場合に起きる いくつかの問題を示している。(修正されたすべての項目については、4.5.9MRに付属するリストを参照)
8694 | popupMenuを閉じたあとのフォーカス遷移の異常 |
8695 | popupMenu を閉じたあとにonBeforeActiveLostイベントが発生しない |
8696 | popup をクローズしたときonBeforeActiveLostイベントがいつも発生する |
8794 | popup を表示したときにpopup にフォーカスが遷移しない– popupMenuの異常 |
8871 | 712-5181390 712-5233153 |
...
This section outlines new functionality, important notes on the use of popups and popupMenus, and the order that events fire after a particular action takes place.
The processing of event handlers has changed; invalid syntax that once worked properly - for instance spaces between the container and the call - will no longer work. Error reporting has improved.
Proposed new order of events for both popup and popupMenu.
- onBeforeActiveLost on invoker ( the component on which right mouse button was clicked)
- onActiveLost on Invoker
- onActiveGained on context popup (either popup or popupMenu)
Notes:
- The onBeforeActiveLost() allows for potential validation on the invoking component before bringing up the popup or popupMenu.
- The activeGained on the context popup, allows focus to be sent to any component when using a popup.
- Since focus is being taken away from the invoker, this means that the selection in a textField will also be taken away. Bug 8794, states that they wanted selection to stay. This can be done by setting the attribute of the textField to "always".
Proposed new order of events
- onBeforeActiveLost on popup
- onActiveLost on popup
- onActiveGained on invoker
- onBeforeActiveLost on popup
- onActiveLost on popup
- onActiveGained on selected component if focusable
This means that if you click into a textField while a context popup is visible, the popup will go away and the textField will gain focus and be selected. This is a change from how it worked before Platform 4.5.9. Previously, in order to select the textField, you had to click twice. Once to dismiss the context popup, and a second time to select the textField.
For a popupMenu, the order of events will be as follows
- onBeforeActiveLost on popup
- onActiveLost on popup
- onActiveGained on invoker
Popup
Previously, nothing happened when pressing escape when the context popup is defined as popup. Version 4.5.9 has the following behavior.
- The component that has focus gets first chance to handle escape key
- If not handled by focused component, the popup will close with the following events.
- onBeforeActiveLost on popup
- onActiveLost on popup
- onActiveGained on invoker
...
...
...
More Java Improvements
Selection behavior using right click of mouse
The following outlines the improved right-click selection behavior.
- Any right mouse click within a selection of cells, rows, or columns, should not result in the selection being changed, but should show the context menu. This is regarless of whether the control or shift keys are down.
- A right mouse click outside the current selections should select the single cell, row or column and bring up the context menu.
- Ctrl-Right mouse Click or Shift-Right mouse click, should add rows, columns, or cells, to the selection if the occurs outside the current selections.
Combo box's width respects explicit setting
If a developer explicitly defines the combo box width, then the combo box width will render with that width regardless of the length of the contents of the largest list item.
Window improvement when using attribute centered="true"
When using centered="true", now, window will not re-center itself everytime window is redrawn.
Styling of heavy weight components in table (XAL) have been improved
Styling such as font and background color inside heavy-weight components now render correctly. This issue was present in XAL only.
...
listItem and row height now support "px" in XAL
It is now possible to specify row and listItem height using "px" when using the XAL syntax.
Ctrl-X now generates an onTextChange event
The onTextChange event will now fire when Ctrl-X (cutting of text) is used.
Events can now be stored in Style Sheets
It is now possible to add events to elements in style sheets.
For example,
...
– 他の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:
Code Block |
---|
<?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> |
Contents of cells inside table can now be aligned vertically
Support has been added to allow table cell contents to be aligned vertically. The name of this attribute for each syntax is, table内のcellのコンテンツを垂直に配置できるようになった
table内のcellのコンテンツを垂直に配置できるようになった。属性名は、"alignVertical" (NXML), and と"verticalAlignment" (XAL). This attribute has the following three values: で、値は"top|bottom|center". Details of this attribute have been added to the schema documentation.
...
を指定する。詳細については、スキーマ定義のドキュメントに記載している。
回避策
...
管理番号8851 -
...
To allow a workaround, we have exposed (undocumented class) comAttributeChangeListener による情報の更新でServerDOMが同期しない
つぎのクラス(ドキュメント化はされていないクラス) を利用してこの問題を回避できる。com.nexaweb.client.xml.ThreadBasedSynchronizer. Where a change or changes to the UI DOM are needed, surround them with a call to push synchronization state and pop synchronizations state. Pop MUST be called when push is called - example
UI DOMが更新される部分を、”push synchronization”と”pop synchronizations”で囲む。pushのあとに必ずpopを呼ぶ必要がある。
例:
Code Block |
---|
public void onAttributeSet(AttributeChangeEvent arg0) { try { ThreadBasedSynchronizer.pushSynchronizationState(true); // change some attributes... } finally { ThreadBasedSynchronizer.popSynchronizationState(true); } } |
Defects Resolved 修正された不具合(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 が中央に再配置される |