• ベストアンサー

文字をドラッグし配列にいれたい

zozyの回答

  • zozy
  • ベストアンサー率60% (20/33)
回答No.4

やっと理解ができました。 どうやら、自分自身いろいろ勘違いをしていたようです。 では、設計について考えましょう そこで俺の案としては マウスクリックで文字列を書き始める位置を指定する //strXはdrawString()でのx座標 int[] strX=new int[Short.MAX_VALUE]; int[] strY=new int[Short.MAX_VALUE]; public void マウスクリックイベント{ strX[strIndex]=クリック時のx座標; strY[strIndex]=クリック時のy座標; } 次に文字列を入力し、主語ボタン・述語ボタン・形容詞ボタン・品詞ボタンなどのいずれかを押す。 //現在配列strで参照している要素番号 strIndex=0; //入力した文字列と文字列の種類を格納する String[] str=new String[]; public void キータイプイベント{ if(キー==エンター){ str[strIndex]="入力した文字列"; }else if(キー==文字キー){ 文字の入力; } } public void ボタンのアクションパーフォームイベント{ str[strIndex]に",文字列の種類"を追加 strIndex++; } こうすることで入力された文字列が主語,述語,形容詞,品詞のどれにあたるか判断できます。 同時に配列への格納も出来ます。 次に線を繋ぐ際ですが、線の出発点にある文字列が終着点の文字列にかかっているということにすれば形→品などの関係が表現できます。 同時に配列にも修飾関係を格納できる。 small-----------→car ....↑出発点.....↑終着点 //現在linkで参照している要素番号 int linkIndex=0; //文字列のつながりをあらわす配列 String[] link=new String[Short.MAX_VALUE]; //出発点の座標 int[] startX=new int[Short.MAX_VALUE]; int[] startY=new int[Short.MAX_VALUE]; //終着点の座標 int[] endX=new int[Short.MAX_VALUE]; int[] endY=new int[Short.MAX_VALUE]; //線の描画 for(iは0~linkIndexまで){ drawLine(startX[i],startY[i],endX[i],endY[i]); } public void マウスプレスイベント{ startX[linkIndex]=プレス時のx座標; startY[linkIndex]=プレス時のy座標; for(iを0~strIndexまで){ if(startX[linkIndex],startY[linkIndex]がstrX[i]+文字列の幅,strY[i]+文字列の高さのなかに入っているか(俗に言うアタリ判定)){ link[linkIndex]にstr[i]に"→"を追加した文字列を格納 } } } public void マウスリリースイベント{ endX[linkIndex]=リリース時のx座標; endY[linkIndex]=リリース時のy座標; for(iを0~strIndexまで){ if(マウスプレスイベントの時のように当たり判定を判定){ link[linkIndex]にstr[i]を追加 linkIndex++; } } } 線の種類に関しては出発点と終着点で線の種類を特定します if(出.equals("形")&&終.equals("品"))線の色は青; if(出.equals("主")&&終.equals("述"))線の色は赤; これで必要な区別は全てできるかと思いますがどうでしょう?

hiro0825
質問者

お礼

何度も本当にありがとうございます。 私自身あまり詳しくないので調べながらzozyさんが書いてくださったことを理解しようとしていますがなかなか難しいようです。 //public void ボタンのアクションパーフォームイベント{ //str[strIndex]に",文字列の種類"を追加 //strIndex++;} の部分ですがstr[strIndex]には文字列が入っていますから文字列の後に種類を追加するという形になるのでしょうか? //if(startX[linkIndex],startY[linkIndex]がstrX[i]+文字列の幅,strY[i]+文字列の高さのなかに入っているか(俗に言うアタリ判定)) アタリ判定というのは見た目上文字列の上に線が引かれているようにみせるためですよね? //{link[linkIndex]にstr[i]に"→"を追加した文字列を格納} これはどういうことでしょうか? 線の描写は線を引くごとでなく引き終わった後になるのでしょうか?

関連するQ&A

  • 文字列の配列

    文字列の配列 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 のようにIPアドレスが一行に一つづつ書き込まれたテキストがあります。 ここから、それぞれのIPアドレスを文字列として配列に書き込みたいのですが、どうしたらよいのでしょうか。 IPアドレスの数だけ配列を始めに宣言して、それぞれに書き込んでいくのでは手間がかかりすぎてしまいます。 単純に数値の羅列なら scanfを使い、配列に格納できるのですが、文字列になるとどうしたらいいのかわかりません。 よろしくお願いいたします。

  • テキストファイルから文字列を読み込んで二次元配列に格納するには

    毎回お世話になっています。 ただいまC言語を勉強中の学生です。 基本的な文法は頭に入れたつもりでしたが、まだポインタと ファイルの入出力に苦手意識があり 実際うまくできないでいるので どなたか ご存知の方にアドバイスいただければと思って書き込ませていただきます。 今回練習しているのは 先に述べたように、テキストファイルに abc def ghi jkl などと文字列を書いておき、そのファイルを読み込んで 二次元配列に格納したいのですが、何を勘違いしているのか、 うまく実現できません。 参考書などを見て 一次元配列へ格納する場合は できたようなのですが、今後このプログラムを発展させる段階で 二次元配列に文字列を 格納できたほうが好都合なので 今模索しています。。。 ちなみに 一次元配列に格納する場合は 以下のように書きました。 #include<stdio.h> #include<stdlib.h> main() { char a[10]; FILE *fp; fp = fopen("word.dat", "r"); if (fp == NULL) { printf("File does not exist.\n"); exit(1); } while(fscanf(fp,"%s",a)==1){ printf("%s\n",a); } fclose(fp); return 0; } 実はコレに関しても分からない点があり、それは 目的の配列変数 a[]に格納できたのだから それを確認したいと思い printfで a[0]~a[10]を表示してみようとしたところ 変に文字化け したものが表示されたり、何も表示されなかったり よく分からないことが起きます。私は何を勘違いしてしまっているのでしょうか(>_<) 長々と書いてしまいましたが、今回 御教授いただきたいのは (1)、テキストファイルから 英字の文字列を読み込んで二次元配列に格納するために用いるのに 一番最適な関数はどれか(fscanfやfgetsなど) そして、その関数を使って 一番シンプルな記述をするにはどのように記述すればよいのか (2)、上のようなプログラムの書き方で、配列aにテキストファイルから読み込んで格納できたようなのに、a[0]~a[10]をprintfしたときに うまく中身が表示されないのはなぜか。 という点なのですが、(1)をとりあえず急いでおりますので、(2)はおまけ程度に考えていただければと思います。 なぜかファイルの入出力がいまだに把握できなくて苦手としておりますので、どうか よろしくお願いいたします。

  • 文字列を配列に…。

    VBはまだ始めたばかりで本当に初歩的なことかもしれませんが分かる方がおられたら是非教えて下さい。 text1.textから取り込んだ文字列を”一文字ずつ”(Dim a(100) as stringで宣言した)配列に格納したいのですがどうしたらいいのでしょうか?? <例>text1.textに"abc"と入力しcommandbuttonを押すとa(0)に"a"がa(1)に"b"がa(2)に"c"が格納されるといったかんじです。 ちなみに今私がしたいのはtext1.textに、ある文字列を入れその文字列を文字コードに変換しそれを一文字分ずつ+1してまたそのコードを文字に直しtext2.textに出力するというものです(ようは簡単な暗号化ですね)。 私はAscとChrコマンドを利用して1文字ずつコードをずらしていこうと思っているのですが、他に良い方法などあるのでしょうか?? 本当に初心者でどのようにしらたよいのか分かりません…。 どなたか分かりやすく教えていただけませんでしょうか?? お願いします。

  • 配列

    あいうえお  の最初の文字(あ)だけをポインタ配列に格納して出力するというプログラムがどうしてもできません。 最初の文字をってところをどうやったらよいのかわからないので教えてほしいです。 おねがいいたします。

  • 配列にある文字列を1つの変数に改行付きで格納する方法

    配列にある文字列を1つの変数に改行付きで格納する方法 Array ( [0] => レタス [1] => トマト [2] => きゅうり ) などの配列を $yasai 変数へ ------ レタス トマト きゅうり ------ と格納してテキスト表示させたいのですが、どのようにすれば可能でしょうか? そもそも可能なのでしょうか?ご存知の方、いらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • PHP
  • 【C#】ドラッグ&ドロップについて

    前にも質問したのですが、行き詰まったのでもう一度質問します。 (1)リッチテキストボックスにテキストファイルをドラッグ&ドロップする。 (2)そのテキストファイルの内容をリッチテキストボックスに表示する。 というプログラムを作っています。 このうち(1)についてはほぼ解決したのですが、(2)についてはさっぱりです。(つまり、DragDropイベントの部分がわかりません。) どなたか教えて下さい。

  • 配列等へのアクセスについて

    プログラム初級者です。 普通配列などへデータを格納するときはインデックスを使って、取り出す時もインデックスを使うと思いますが、一意の文字列をキーとしてデータの格納、取り出しをするような方法はないでしょうか?

    • ベストアンサー
    • Java
  • 文字列と文字列をつなげるには

    下記のようにプログラムを作りました。 簡略しているのでわかりづらいと思いますが、 文字の配列と文字の配列を文字の配列に格納したいので、 下記のように$arrayに”.=”として文字列を加えて いますが、うまくいきません。 どのようにしたらいいのでしょうか? ご教授お願いいたします。 while($text[$i] != ""){ if($i==1){ $array[$j] = $feild[$j]; $array[$j] .= " "; $array[$j] .= substr($text[$i], $no, $pos); } }

    • ベストアンサー
    • PHP
  • ファイル内の文字を配列に格納

    ファイル内の文字列をも表示させた上で、文字列を配列に1つずつ格納したいのですが、とっても簡単な方法で教えてください。 ファイル名は「abc」で配列名は「moji」でお願いします。

  • Accessのフォーム内、テキストボックスで文字をドラック&ドロップで移動させることはできるのでしょうか?

    Access2000~2003でフォーム入力画面のテキストボックスで、入力した文字列を移動させたいとき、ワードと同じようにドラック&ドロップで文字を移動できるようにするプロパティの設定は可能でしょうか? また、プロパティ以外で方法はあるのでしょうか?お教え下さい。 よろしくお願い致します。