aboutsummaryrefslogtreecommitdiff
path: root/files/ja/archive/mozilla/xul/popupguide/panels/index.html
blob: f2abd4409488481fa060bf33644e5e7c7321174e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
---
title: Panels
slug: Archive/Mozilla/XUL/PopupGuide/Panels
tags:
  - XUL
  - XUL Popup Guide
translation_of: Archive/Mozilla/XUL/PopupGuide/Panels
---
<p>

<span id="Panels"></span>
</p>
<h3 id=".E3.83.91.E3.83.8D.E3.83.AB" name=".E3.83.91.E3.83.8D.E3.83.AB">パネル</h3>
<p>パネルはあらゆる種類の内容に対応するポップアップです。データを選択または入力するための一時的なポップアップを提供する時に使用します。
</p><p><span id="The_panel_element"></span>
</p>
<h4 id="panel_.E8.A6.81.E7.B4.A0" name="panel_.E8.A6.81.E7.B4.A0">panel 要素</h4>
<p>パネルを作成するには <code><a href="/ja/docs/Mozilla/Tech/XUL/panel" title="panel">panel</a></code> 要素を使います。パネルは panel 要素の子要素として設置されたどんな要素でも表示できます。例えば、次のパネルは検索用のテキストボックスを表示します。
</p>
<pre>&lt;panel id="search-panel"&gt;
  &lt;label control="search" value="Terms:"/&gt;
  &lt;textbox id="search"/&gt;
&lt;/panel&gt;
</pre>
<p><img alt="Image:Popupguide-panel.png">
</p><p><code id="a-popup"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/popup">popup</a></code> 属性を使うとパネルを要素に取り付けることができ、例えばボタンを押すとパネルが開くといった事が可能になります。popup 属性は同じドキュメント内のパネルの id に設定しなければなりません。 <code id="a-popup"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/popup">popup</a></code> 属性を持つ要素の上で左マウスボタンを押すと、対応するパネルが表示されます。例えば、ラベルに上記のポップアップを取り付けるには、次のコードを使います。
</p>
<pre>&lt;label value="Search" popup="search-panel"/&gt;
</pre>
<p>こうすると検索語句を入力するためのパネルを開く検索ボタンが出来上がります。このパネルはマウスポインタの位置にパネルの左上の角が来るように表示されます。この場合、マウスポインタの下ではなくボタンの下にポップアップを表示させたいと思うかもしれません。これはボタンにパネルを取り付けるときによくある状況なので、 <code id="a-position"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/position">position</a></code> 属性を使ってポップアップの位置を配置をコントロールできるようになっています。普通は <code id="a-type"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/type">type</a></code> 属性を <code>menu</code> に設定して作成するメニュー型のボタンを使った方が良いということに注意してください。以下が完全なサンプルです。
</p>
<pre>&lt;panel id="search-panel" position="after_start"&gt;
  &lt;label control="search" value="Terms:"/&gt;
  &lt;textbox id="search"/&gt;
&lt;/panel&gt;

&lt;label value="Search" popup="search-panel"/&gt;
</pre>
<p>「after_start」という値を持つ <code id="a-position"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/position">position</a></code> 属性がパネル要素に追加されています。これによって、マウスがクリックされた位置ではなく、ラベルの底辺に沿うようにパネルが表示されるようになります。この属性と、他に使用できる値についてのより詳しい情報は、<a href="ja/XUL/PopupGuide/Positioning">ポップアップの位置決め</a>を参照して下さい。
</p><p>popup 属性の代わりに <code id="a-context"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/context">context</a></code> 属性を使えば、コンテキストメニューのようにパネルを開く事も可能です。これは menupopup 属性の代わりに panel 要素が使われる事を除けば、コンテキストメニューを使うのと同様に動作します。詳細は<a href="ja/XUL/PopupGuide/ContextMenus">コンテキストメニュー</a>を参照して下さい。
</p><p><span id="Opening_a_Panel_with_Script"></span>
</p>
<h4 id=".E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.81.A7.E3.83.91.E3.83.8D.E3.83.AB.E3.82.92.E9.96.8B.E3.81.8F" name=".E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.81.A7.E3.83.91.E3.83.8D.E3.83.AB.E3.82.92.E9.96.8B.E3.81.8F">スクリプトでパネルを開く</h4>
<p>パネルは、全てのポップアップと同様に、スクリプトからポップアップを開くのに使用できる <span id="m-openPopup"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopup">openPopup</a></code></span> メソッドを持っています。例えば、次のコードはボタンの下にパネルを開きます。
</p>
<pre>panel.openPopup(button, "after_start", 0, 0, false, false);
</pre>
<p>同様に、 <span id="m-openPopupAtScreen"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopupAtScreen">openPopupAtScreen</a></code></span> メソッドはパネルをスクリーン上の特定の位置に開きます。この 2 つのメソッドの詳細は<a href="ja/XUL/PopupGuide/OpenClose">ポップアップの開閉</a>を参照して下さい。
</p><p><span id="Closing_a_Panel"></span>
</p>
<h4 id=".E3.83.91.E3.83.8D.E3.83.AB.E3.82.92.E9.96.89.E3.81.98.E3.82.8B" name=".E3.83.91.E3.83.8D.E3.83.AB.E3.82.92.E9.96.89.E3.81.98.E3.82.8B">パネルを閉じる</h4>
<p>パネルはユーザがパネルの外側をクリックすると自動的に閉じられます。しかし、パネルの中にそれを閉じるためのボタン等の要素が設置される事も珍しくありません。例えば、上記の検索パネルの例に、押された時にパネルを閉じるボタンを追加できます。
</p>
<pre>&lt;script&gt;
function doSearch()
{
  document.getElementById("search-panel").hidePopup();
}
&lt;/script&gt;

&lt;panel id="search-panel" position="after_start"&gt;
  &lt;textbox id="search"/&gt;
  &lt;button label="Search" oncommand="doSearch();"/&gt;
&lt;/panel&gt;

&lt;toolbarbutton label="Search" popup="search-panel"/&gt;
</pre>
<p>この例では、Search ボタンが押されると関数 doSearch が呼ばれます。この関数はポップアップを取得してその <span id="m-hidePopup"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/hidePopup">hidePopup</a></code></span> メソッドを呼び出します。もちろん、この関数には検索を開始するコードも含まれるべきでしょう。
</p><p><span id="The_noautohide_attribute"></span>
</p>
<h4 id="noautohide_.E5.B1.9E.E6.80.A7" name="noautohide_.E5.B1.9E.E6.80.A7">noautohide 属性</h4>
<p>パネルはユーザがパネルの外側をクリックするか、escape キーを押すと閉じます。これはユーザが操作をキャンセルする通常の方法です。また、たくさんのコントロールがあるためにパネルが比較的大きい場合には、パネルの中にキャンセルボタンや「閉じる」ボタンを設置したい場合もあるでしょう。
</p><p>しかしながら、ユーザがパネルの外側をクリックしても、パネルを開いたままにしておきたい事もあるかもしれません。これはフローティングツールパネルを作成したい時に便利です。これを実行するには、パネルの <code id="a-noautohide"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/noautohide">noautohide</a></code> 属性を true に設定します。
</p>
<pre>&lt;panel id="search-panel" noautohide="true"&gt;
  &lt;textbox id="search"/&gt;
  &lt;button label="Search" oncommand="doSearch();"/&gt;
  &lt;button label="Cancel" oncommand="this.parentNode.hidePopup();"/&gt;
&lt;/panel&gt;
</pre>
<p>こうするとパネルはどこをクリックしても閉じなくなってしまうので、パネルは必ず自分自身を閉じる手段を提供しなければなりません。この例ではキャンセルボタンを追加しています。
</p><p><span id="Focus_in_Panels"></span>
</p>
<h3 id=".E3.83.91.E3.83.8D.E3.83.AB.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E3.83.95.E3.82.A9.E3.83.BC.E3.82.AB.E3.82.B9" name=".E3.83.91.E3.83.8D.E3.83.AB.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E3.83.95.E3.82.A9.E3.83.BC.E3.82.AB.E3.82.B9">パネルにおけるフォーカス</h3>
<p>パネル内部の要素はマウスを使ってフォーカスすることができ、また Tab キーを押して現在フォーカスのある要素を変更する事ができます。ポップアップが開かれると、メインウィンドウの要素にフォーカスがあった場合にはその要素からフォーカスが外され、その要素で <code>blur</code> イベントが発生します。初期状態ではポップアップ内のどの要素にもフォーカスがありませんが、ユーザは Tab キーを押す事でパネル内部の最初の要素にフォーカスを当てる事ができます。パネルが開かれた時に初期状態で特定の要素にフォーカスが当たるようにしたければ、<code>popupshown</code> イベントハンドラの中でフォーカスを変更してください。例えば、上記の例で最初から textbox にフォーカスされるようにしたければ、このようにします。
</p>
<pre>&lt;panel id="search-panel" onpopupshown="document.getElementById('search').focus()"&gt;
</pre>
<p>パネルが閉じると、パネル内部の要素に focus イベントを持つ要素があれば、その要素からフォーカスが取り除かれます。こういったポップアップの開閉時のフォーカスを取り除くプロセスは、<code>popupshowing</code> イベントもしくは <code>popuphiding</code> イベントが発生した後に起こります。したがって、これらのイベントがキャンセルされるとフォーカスは変更されません。
</p><p>パネルが開かれたときのフォーカスの変更を無効にするには、<code id="a-noautofocus"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/noautofocus">noautofocus</a></code> 属性を <code>true</code> に設定します。
</p>
<pre>&lt;panel noautofocus="true"&gt;
</pre>
<p>こうすると、パネルが開かれたときにフォーカスされていたメインウィンドウ内の要素にフォーカスが残ります。ただし、パネルが閉じたときにもパネル内にフォーカスが残ったままになるので注意してください。
</p>
<div class="noinclude">
</div>