Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Version History

« Previous Version 3 Current »

Java 版の改良

ポップアップの変更

概要
MR版リリースの目的のひとつとして、ポップアップの改良がある。ここでは、特定のアクションのあとにつづく、イベントの順序についてアウトラインを示 す。以下にあげる、不具合はコンテキストメニューとしてポップアップ(popup)とポップアップメニュー(popupMenu)を利用した場合に起きる いくつかの問題を示している。(修正されたすべての項目については、4.5.9MRに付属するリストを参照)

8694popupMenuを閉じたあとのフォーカス遷移の異常
8695popupMenu を閉じたあとにonBeforeActiveLostイベントが発生しない
8696popup をクローズしたときonBeforeActiveLostイベントがいつも発生する
8794popup を表示したときにpopup にフォーカスが遷移しない– popupMenuの異常
8871712-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"に設定することで実現できる

popupMenumenuItemの選択
イベントの発生順序は次のとおり。
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 を選択中のウィジェットとして追加する。

comboBoxwidthの設定が有効となる
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 rowheight "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"を指定しても有効にならない
7004712-3701912 - on drop down list のscrollbarでなにも表示しない
7711quickEdit が指定されたtableで、エディターとして指定したcomboBoxで選択した値が表示されない
7955cell とlistItem でスタイルが有効とならない
7972cell のalignVertical 属性が機能しない
7973スタイルシートのエレメントにイベントが設定できない
8026rowの位置を変更するとNullPointerExceptionが発生する
8032quickEdit が指定されたtableで、エディターとして指定したcomboBoxで選択した値がcellに反映されない
8234チャイルドペインのサイズを変更しても、dialogのwidth とheightが自動的に更新されない。
8350Ctrl+X でテキストを切り取り編集してもonTextChange イベントが発生しない
8351menuItemを選択した後、マウスホイールが正常に動作しなくなる
8369"selectedStyle"を持つエレメントがUI Documentに追加されたときNullPointerExceptionが発生する
8448712-4905380 - listItem のheightに"px"が指定されたとき、InvalidXmlExceptionが発生する
8639onBeforeActiveLostのハンドラでsetTextを使ったとき、コミットしていない状態のIMEのテキストがクリアされない
8694popupMenuをクローズしたあとのフォーカスの遷移がおかしい
8695popupMenu をクローズしたあとonBeforeActiveLostイベントが発生しない
8696popup がクローズしたとき, onBeforeActiveLost イベントが常に発生する
8707lockedColumnがtreeTable で指定されたとき、ツリーが展開できない
8715Undo/RedoでonTextChangeイベントが発生しない
8727macroやXModifyでtableを更新したときテキストが表示されない
8787712-5056583 - onMouseDrag イベントがスキーマドキュメントにない
8793tableでcell以外のウィジェットのスタイルが正しく反映されない
8794popup を表示したときフォーカスが取得できない- popupMenuの動作と矛盾する
8795gridPane (gridLayout) で"gridColumnSpan"を設定した場合、必要ないスペースが表示される
8822712-5072564 - horizontalFlowPane でペアレントとなるウィジェットが垂直に並ばない
8827FocusServiceのgetCurrentFocus() でcomboBox が取得できない
8836comboBox にフォーカスが遷移したとき、buttonのonCommand イベントがaccessKey で複数回呼び出される
8837comboBoxにフォーカスが遷移したあと、マウスホイールが正常に動作しない
8839treeTable でマウスがはなれたあともlinkの色が元に戻らない
8851AttributeChangeListenerで更新された内容が、ServerDOMに同期されない
8855サーバからのレスポンスでクライアントのDOMが更新されたあと、その内容がServerDOMに同期されない
8858comboBox でwidth 属性を設定しても反映されない
8863treetable でlockedColumnを指定するとツリーが展開されない
8871712-5181390 712-5233153 - popMenu 表示後、フォーカスが他のUIウィジェットに遷移してもpopMenuが閉じない
8993712-5328616 - 右ボタンクリックで選択状態となる
9019ペインを再描画するとwindow が中央に再配置される


 

  • No labels