Q1:p12 列の追加は、p3の行の追加とは設定が異なっています。その理由を教えて下さい。
Q1-1:
チュートリアル活用編p12について質問があります。列の追加は、p3の行の追加とは設定が異なっています。その理由を教えて下さい。行の追加で「行数を取得する」とあります。これは、テーブルがそれ自体で保持している行数を取得するという意味でしょうか?これは列の追加では設定しませんでした。それは何故でしょうか?また、列を追加するでは、「テキストを取得する」のデータ型は文字列を示すStringでしたが、行の場合では、Objectになっています。この違いは何に起因しているのでしょうか?また、p12で引数2で列の位置を設定していて、固定値0としています。行の追加で何故、列の位置を設定するのでしょうか?
A1-1:
まずこの活用編P12の処理の目的ですが、ボタンを押すと[テーブル]に一行追加し、0列目には[テキストフィールド]に入力した項目名を設定するようになっています。
「行数を取得する」処理は、新しく追加した行の0列目に項目名を設定する際の『最終行の行インデックスを知る』ことを目的としています。
[テーブル]の行数は1行、2行...と数えますが、行インデックスは「0」から始まるので0行目、1行目と数えていきます。
例えば4行ある[テーブル]の行数は「4」ですが、最終行の行インデックスは「3」です。
「メソッド:セルの値を設定する]の「<引数1>(行の位置)」は行インデックスで指定します。単純に「取得方法:メソッド戻り値、コンポーネント:テーブル、メソッド/値:行数を取得する」とすると、行インデックスより1大きい数が取得されるため、行を新しく追加する以前に、(1少ない)行数を取得しておき、その値を利用するという方法を取っています。
なおこのチュートリアルは以前から使用しているものですが、MZPlatformver2.2からは「メソッド:最終行の位置を取得する」が[テーブル]コンポーネントに追加されており、P12の処理は「行数を取得する」の処理は行わず、「メソッド:セルの値を設定する]の<引数1>で「取得方法:メソッド戻り値、コンポーネント:テーブル、メソッド/値:最終行の位置を取得する」として頂いても同じように動作します。
「メソッド:セルの値を設定する]のセルの値は「String(=文字列)」だけとは限りません。数値や日付型のデータが入る場合もあります。<引数0>では何らかのデータということで「object」型となっています。
P18の<引数0>についての記述、「取得方法:メソッド戻り値、コンポーネント:テキストフィールド、メソッド/値:テキストを取得する」は「テキストフィールドからテキストを取得し、セルの値として設定する」の意です。
また、<引数2>ではセルの値を設定したい列位置を指定しますが、一番左端の列に項目名を入れているため、ここでは行インデックス「0」としたいので、「取得方法:固定値、メソッド/値:0」としています。
Q1-2:
活用編p12についてお答え頂きましたが未だに理解できていなところがありますので、再度ご質問致します。同じ追加するであるにも拘わらず、p3の列の追加では、「列数の取得」をおこなわなかったのにp12の行の追加では、何故、「行数を取得する」をおこなっているのでしょうか?また、何故、p12では2回も「行数の取得」をおこなっているのでしょうか?ObjectやStringなどの引数のデータ型を調べるには何を参照すれば宜しいでしょうか?
A1-2:
> p3の列の追加では、「列数の取得」をおこなわなかったのにp12の行の追加では、何故、「行数を取得する」をおこなっているのでしょうか?
単純に最終行/列に、一行/一列追加する場合には「行を追加する()」「列を追加する()」を行えば良く、「行数を取得する()」を行う目的は行の追加のためではありません。
目的の箇所の「セルの値を設定する」(=新しく追加した列の0列目に項目名を設定する)ために、「行数を取得する()」の処理は行われています。
新しく追加した行はテーブルの最後尾に追加されます。前述の通り、ver2.1までは簡単に「テーブルの最終行のインデックス」を知る方法が無かったため、
@行を追加する前に「行数を取得」しておく(=行数を知る)
A新しく一行を最後尾に追加する
B最終行のインデックスは、@で取得した数と同じ((行数-1)=行インデックス)になる
という考え方で、一行追加後の「最終行の行インデックス」を知るようにしてます。
「最終行の行インデックス」は行の追加のために必要な訳ではなく、「セルの値を設定する(Object,int,int)」の引数設定のために必要なものです。
> 何故、p12では2回も「行数の取得」を おこなっているのでしょうか?
接続確認の表の見方ですが、「■起動メソッド」という項に書いてあるのが、「■接続先」コンポーネントに設定されるメソッドで、<引数0>、<引数1>という項目名に続く設定は、そのメソッド設定に必要な引数の情報です。
「■起動メソッド」で「行数を取得する()」が指定されているのは1回です。
P12のB番目の表をご覧頂くと、「メソッド:セルの値を設定する(Object,int,int)」<引数1>の項は「取得方法:メソッド処理結果、メソッド/値:行数を取得する()」となっています。
「取得方法:メソッド処理結果」というのは『同じイベントに繋がる処理のうち、先に行われた処理の結果(情報)を利用することができる』方法とお考え下さい。
2回「行数を取得する()」を行っている訳ではなく、先に1度行った処理の結果を利用しているとお考え下さい。
そして、「メソッド:セルの値を設定する(Object,int,int)」の引数に、行が増える前の行数が必要な理由は、行が増えた後の「最終行の行インデックス」が必要だからです。
(なおver.2.2からは前回お答えしたように、より簡単な方法で設定ができます)
> ObjectやStringなどの引数のデータ型を調べるには何を参照すれば宜しいでしょうか?
Object,Stringといったデータ型の名称はJAVA言語で使用されている名称と相違はありませんので、意味するところは市販のJAVAの参考書をご覧頂ければと存じます。
どのメソッドでどのデータ型が引数として指定されているかは、詳しくはJavadocをご覧頂くことになります。
MZPlatformの「ドキュメントインデックス」から、まず『コンポーネントリファレンス』をご覧ください、左側の一覧から調べたいコンポーネント名をクリックすると、各コンポーネントの詳細が右側に表示されますが、ページ上方の「クラス名」というところのリンクをクリックすると、各コンポーネントのJavadocが開きます。
各メソッドについては、このJavadocを見て頂くことになります。
ただ、何故「セルの値を設定する」の<引数0>のデータ型が「String」でないのかというご質問には、誤解があるように存じます。
ここでの処理の目的は『項目名を設定すること』ではあるのですが、『項目名』は単に「0列目」のセル内に設定したデータを指し、「セルの値を設定する」の引数は「文字列=String」に限定されるものではありません。
「列名」の場合はセルの値とは区別されるものですが、このアプリケーションでいう『項目名』は、0列目に入力したセルの値を指しています。
[ガントチャート]グラフに設定したテーブルデータは、0列目のデータが「項目」として利用されるという仕様になっています。
Q1-3:
引数のデータ型としてのObjectについて質問します。
これは、何らかのデータを示しており、特にデータ型は指定されていないと考えて宜しいでしょうか?ObjectはStringのデータ型を含むと考えて宜しいのでしょうか?
活用編p.46
booleanが起動メソッドで設定されています。これは、真と偽のみを扱える変数です。「ボタンの無効化」とbooleanがどのように関連付けられているのでしょうか?
p48
処理を呼び出す()の()は引数のデータ型がどんなものでも良いという意味でしたでしょうか?サブーチンを呼び出すのは、「アクションイベント」だと思っていましたが、ここでは「データ選択イベント」になっています。何故でしょうか?行の選択を解除する起動メソッドがdoClick()になっています。クリックと選択解除とはどのような関係があるのでしょうか?
p56
1行を削除する起動メソッドの引数が整数であるintを示していますが、1行という情報はこのメソッドに含まれていません。どこで1を設定しているのでしょうか?
A1-3:
> これは、何らかのデータを示しており、特にデータ型は指定されていないと考えて宜しいでしょうか?ObjectはStringのデータ型を含むと考えて宜しいのでしょうか?
MZPlatformから少し離れますが、Javaにはクラス(定義)があり、Object型はすべてのクラス階層の上位となっています。
どんなデータもObject型に入れることができ、その意味では一つのデータ型に特定されておらず、文字列もObject型に入れることができます。
> 活用編p.46
> booleanが起動メソッドで設定されています。これは、真と偽のみを扱える変数です。「ボタンの無効化」とbooleanがどのように関連付けられているのでしょうか?
「ボタン押下可否を設定する」引数がtrueの時−ボタン押下可「ボタン押下可否を設定する」引数がfalseの時−ボタン押下不可となっています。
> 処理を呼び出す()の()は引数のデータ型がどんなものでも良いという意味でしたでしょうか?
括弧の中に何も入っていないメソッドは、実行時に引数を必要としないものです。
> サブーチンを呼び出すのは、「アクションイベント」だと思っていましたが、ここでは「データ選択イベント」になっています。
> 何故でしょうか?
[サブルーチン]には主なメソッドが2つあります。
1.「処理を呼び出す()」→実行されると[サブルーチン]からアクションイベントが発生します。
2.「イベントを渡して処理を呼び出す(PFEvent)」→実行されると[サブルーチン]から引数で指定したイベントが発生します。
例)@「処理完了イベント」に[サブルーチン]を接続し、「イベントを渡して処理を呼び出す(PFEvent)」を選択。
A引数「取得方法:イベント」とすると接続している「処理完了イベント」が指定されたことになる。
B[サブルーチン]から「処理完了イベント」が発生する。
[サブルーチン]を呼び出すのが「アクションイベント」なのではなく、[サブルーチン]のメソッド「処理を呼び出す()」を実行すると、[サブルーチン]から「アクションイベント」が発生します。
> 行の選択を解除する起動メソッドがdoClick()になっています。
> クリックと選択解除とはどのような関係があるのでしょうか?
[ボタン]の「doClieck()」メソッドは、ボタンが押されるのと同様、実行されると[ボタン]からアクションイベントが発生します。
[ボタン(ID:5)]のアクションイベントの先には[テーブル]の「clearSelection()」や「ボタンの押下可否を設定する」の処理を繋いだ[サブルーチン]が繋がっていますから、[ボタン(ID:5)]の「doClieck()」が実行されると、それらの処理が続けて行われることになります。
> 1行を削除する起動メソッドの引数が整数であるintを示していますが、1行という情報はこのメソッドに含まれていません。
> どこで1を設定しているのでしょうか?
[テーブル]の「特定行を削除する(int)」の引数のintは行の位置を示しています。このメソッドは、予め[テーブル]を1行削除するメソッドとして設定してあり、「1行だけを削除」といったことを特に指定する必要はなく、また逆に削除する行数を指定することはできません。
Q1-4:
活用編p12
「行数を取得する」目的は、Worknameを入力したい行数に設定したいためだとお伺いしました。しかし、行数を取得した後に「行を追加」しています。この追加した行の1列目にWorknameを追加したいので、本来は行を追加した後で行数の取得をおこなうべきだと思いますが、如何でしょうか?テキストでは逆になっています。
p3とp12
列と行の違いはありますが、いずれもそれぞれの1行目と1列目にテキストを設定しています。しかしながら、接続先コンポーネントの数や起動メソッドに違いがあります。これは何故でしょうか?先日も同じ質問をしました。個々の起動メソッドの目的は理解できました。しかしながら、同じ操作にも拘わらず、列と行で設定の方法が異なるのは何故なのでしょうか?MZ特有の理由でしょうか?行数を取得する()の()は引数を必要としないことを意味すると伺いました。引数なしで行数を取得することは可能なのでしょうか?行数のデータは引数に代入されて情報として取得されると考えていますが間違いでしょうか?
A1-4:
P12の「行数を取得する()」のタイミングですが、「一行追加後の行数」と「追加する前の行数」とでは、行数が「1」違うことはお分かり頂けると思います。以前も回答しましたように、[テーブル]の「行数」と「最終行位置」とでは示す数が違い、「最終行位置」の方が「1小さい数」となっています。
セルの値を設定する際には、行位置、列位置を使ってセル位置を指定します。
チュートリアルでは最終行にセルの値を設定しています。
以前のバージョンでは簡単に「最終行位置」を取得する方法が無かったため、何らかの方法で実際の行数から1少ない数を得て、それを「最終行位置」とする必要がありました。
チュートリアルの方法が判りにくければ、行を追加した後に[テーブル]の行数を取得し、何らかの方法でその数を「1小さく」して頂ければ結構です。
また以前の回答にも書きましたが、MZPlatform2.2からはメソッド「最終行の位置を取得する()」が追加されましたので、チュートリアルとは別の方法が可能です。
列を追加する際には列名と列型を指定していますが、行の場合には(行名、行型)といったものは存在しないので、引数の指定などに違いが出てきます。
「〜を取得する」というメソッドで引数があるものもありますが、それは取得したいデータの位置などを指定するためで、引数に値が代入されるわけではありません。テーブル行数を取得する際に引数は必要ありません。
取得した後は、他のコンポーネントに設定したり、他のメソッド設定の際に引数として利用するということになります。
「ボタン押下可否を設定する(Boolean)」は英語名では「setEnabled(Boolean)」ですが、Boolean値による有効/無効の設定は予め決めてあります。
この「setEnabled(Boolean)」Java言語でも使用されているものであり、動作はJavaの仕様に準じています。
> doClick()は、その「ボタン」を押されることを示しており、そのボタンが接続元であってその先につながっている接続先のコンポーネントの起動メソッドが実行される、と考えて良いのでしょうか?
このメソッド「doClick()」が実行されると、実行画面でユーザーがマウス等でボタンをクリックしたのと同様になり、[ボタン]からアクションイベントが発生しますので、上記のご理解で結構です。
> また、doClick(int)のintは、ボタンが押される回数を意味するのでしょうか?
この引数はボタンが押されている時間(ミリ秒)を示しています。
「特定行を削除する(int)」の引数は「行インデックス=行位置」で何番目の行を削除するか指定するものになります。
Q1-5:
> P12の「行数を取得する()」のタイミングですが、「一行追加後の行数」と「追加する前の行数」とでは、行数が「1」違うことはお分かり頂けると思います。以前も回答しましたように、[テーブル]の「行数」と「最終行位置」とでは示す数が違い、「最終行位置」の方が「1小さい数」となっています。
ここでの「最終行位置」とはその行のindexのことを指しているのでしょうか?
「行数を取得する()」は、indexを取得することでしょうか?それとも実際の行数を取得するのでしょうか?お答えでは、「1小さい数字」ということなのでindexだと推察します。取得するときはindexとするが、情報として確保するときはindexそのものを行数とみなすのでしょうか?これは、下記の何らかの方法を考案しなければならなかったことによる苦肉の方法なのでしょうか?
> セルの値を設定する際には、行位置、列位置を使ってセル位置を指定します。
> チュートリアルでは最終行にセルの値を設定しています。
> 以前のバージョンでは簡単に「最終行位置」を取得する方法が無かったため、何らかの方法で実際の行数から1少ない数を得て、それを「最終行位置」とする必要がありました。
> チュートリアルの方法が判りにくければ、行を追加した後に[テーブル]の行数を取得し、何らかの方法でその数を「1小さく」して頂ければ結構です。
>
> また以前の回答にも書きましたが、MZPlatform2.2からはメソッド「最終行の位置を取得する()」が追加されましたので、チュートリアルとは別の方法が可能です。
このときの位置とは、indexの情報でしょうか?MZで行数や列数の位置を確定する際にもちいる情報は、行数や列数そのものではなくて、すべてindexで統一しているのでしょうか?
>> また、doClick(int)のintは、ボタンが押される回数を意味するのでしょうか?
> この引数はボタンが押されている時間(ミリ秒)を示しています。
doClick()では引数を必要としないので、押されている時間には無関係に次のイベントが実行されると考えて良いのでしょうか?
A1-5:
> ここでの「最終行位置」とはその行のindexのことを指しているのでしょうか?
[テーブル]全体の最後の行の「行位置=行インデックス」を指しています。
例えば行が「4行」ある[テーブル]があったら、「最終行の位置」は「3」です。
もう一度このP12からの流れを確認すると
@行が「3行」あるテーブルがあります。
A行数を取得します。「3」です。
B1行追加します。
Cテーブルの行は「4行」になりました。
新しく追加した行にはデータは何も入っていません。
左端のセルに値を設定したいのですが、行の位置を数える時は上から「0,1...」と数えるので、「新しく追加した行」は「3番目」となります。
DAで取得しておいた「3」という数字を使って、セルの位置を指定し、セルに値を設定します。この値が「項目名」ということになります。
以前はこの「3」という数字(最終行の位置)を取得するのが難しく、ただ単に本来の行数より「1」少ない数を得たいため、新しい行の追加前に、行数を取得しています。
前回の回答でも書きましたように、現在のバージョンではこのようなまわりくどい方法を取る必要はございません。
> このときの位置とは、indexの情報でしょうか?MZで行数や列数の位置を確定する際にもちいる情報は、行数や列数そのものではなくて、すべてindexで統一しているのでしょうか?
「セルの値を設定する(Object,int,int)」は、最終行に値を設定する時だけに用いる訳ではなく、途中のセル、例えば3行×3列のテーブルの真ん中のセルに値を設定するという場合も、もちろんあります。
何かを順番に数えていく場合には、一般的なプログラミング言語では「0」から始まります。何番目かということを表す場合には、この「0」から始まる位置インデックスが用いられます。
> doClick()では引数を必要としないので、押されている時間には無関係に次のイベントが実行されると考えて良いのでしょうか?
「doClick()」は実行画面で本当に押されたようになるか目で確認するのは、一瞬のことで、難しいかと思います。
このメソッドが実行されると、すぐさま[ボタン]からアクションイベントが発生すると考えて頂いて結構です。