• 締切済み

選択した項目を隣のリストへ移動

teketonの回答

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

>u1.add(s1.getItem(i), j); ここ。j番目に追加する際、u1の要素数がjより少ない場合、末尾に追加されてしまう。

参考URL:
http://e-class.center.yuge.ac.jp/jdk_docs/ja/api/java/awt/List.html#add(java.lang.String, int)
buzzard2415
質問者

補足

u1.add(s1.getItem(i), j); の直前に if(u1.getItemCount() - 1 < j) j = u1.getItemCount() - 1; を入れたのですが、ダメでした。 後は何を入れればいいですか?

関連するQ&A

  • ListのItemListenerについて

    50音のリストから選択したタイトルの画像を表示するようなプログラムを作ろうと思っているのですが、ItemListenerの2種類以上の使い方?が分かりません。 左側のChoiceからListの内容は書き換えることが出来たのですが、真ん中のListから右のListを書き換え、更には右のListから下部へ画像を表示させたいのです。 この場合どのように記入すればいいのか教えてください。お願いします。 以下拙いですが自分の書いた部分です import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Test extends Applet implements ItemListener{ Panel p[]=new Panel[1]; Choice c1; String s[]={"あ","い","う","え","お","か","き","く","け","こ", "さ","し","す","せ","そ","た","ち","つ","て","と", "な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ", "ま","み","む","め","も","や","ゆ","よ","","", "ら","り","る","れ","ろ","わ","","","","",}; List lst1,lst2; int i; public void init() { p[0]=new Panel(new GridLayout(1,3)); c1=(Choice)p[0].add(new Choice()); for (i=0;i<50;i=i+5) c1.add(s[i]+"行"); c1.addItemListener(this); lst1=(List)p[0].add(new List(5)); lst1.add(s[0]); lst1.add(s[1]); lst1.add(s[2]); lst1.add(s[3]); lst1.add(s[4]); lst1.addItemListener(this); lst2=(List)p[0].add(new List(5)); lst2.addItemListener(this); add(p[0]); } public void itemStateChanged(ItemEvent e){ Choice c1=(Choice)e.getSource(); String str=(String)c1.getSelectedItem(); if(str.equals("あ行")){ lst1.removeAll(); for(i=0;i<5;i++){ lst1.add(s[i]); } lst2.removeAll(); } else if(str.equals("か行")){ lst1.removeAll(); for(i=5;i<10;i++){ lst1.add(s[i]); } lst2.removeAll(); } 以下わ行まで書いてあります } public void destroy() { } }

    • ベストアンサー
    • Java
  • 九九の表の応用

    Java勉強中の超初心者です。 ちょっと前に同じ質問をしたのですが、前回の回答をよく見たら 趣旨とは違った処理をしていたのでもう一度、質問をさせて下さい。 ArrayListを使った九九の表を作成します。 この時に、九九の計算結果を一旦、Stringの配列に格納してから、 ArrayListから値を出力します。 この時にArrayListに格納してから出力するソースは書くことが できたのですが、一旦、格段はString[]s = new String[9];として Stringの配列に格納してから、ArrayListにまとめて出力する方法 をご教授お願いできますか? ----------------------------------------------------------- ArrayList list = new ArrayList(); //ここにString[]s = new String[9];が入ります。 for(int i = 1; i <= 9; i++ ){ for(int j = 1; j <= 9; j++){ list.add(i*j); System.out.print(list.get(list.size() - 1) + " "); if((list.size() - 1) % 9 == 8 && (list.size() - 1) != 0){ System.out.println(""); } } } ---------------------------------------------------------- 上記のソースを元に作成できたらと、思います。

    • ベストアンサー
    • Java
  • 配列の中に、リストが入っているものをボトムアップ形式でマージソートして

    配列の中に、リストが入っているものをボトムアップ形式でマージソートしています。 リストは、空のノードの次に文字列が入ったノード、というものです。 sizeは、配列の要素数となっています。 merge_listは、リスト2つをマージするものです。 2つのリストをマージして、ひとつになったリストを最初のリストが入っていた配列に入れる。 もう片方はNULLにする。 順に繰り返していき、配列の要素が1つのみになったらそれを返す・・・ といったアルゴリズムなのですが、うまく配列の中のリストが指定できません。 調べたところ、おそらくプログラム中の矢印があるところに問題があってprintfが実行できないようなんですが、原因がわかりません。 同じ原因によりmerge_listに、マージしたいリストが入っていないようなんですが・・・。 説明下手ですいませんが、どうかよろしくお願いします。 typedef struct list * word_list; struct list { char* word; word_list rest; }; word_list _mergesort(word_list* word_lists, int size) { int i=0, j; while(1){ while(1){ while(word_lists[i] =NULL) //配列に一つ目の要素が見つかるまで回す <- 原因 i++; j = i+1; while(word_lists[j] =NULL) //配列に二つ目の要素が見つかるまで回す<- 原因   j++;       if(j == size) //マージする要素が後ろになかったら終了  break; //printf("%d,%d\n",i, j); printf("%s\n",word_lists[i] ->rest ->word);  <-ここでエラー printf("%s\n",word_lists[j] ->rest ->word); word_lists[i] =merge_list(word_lists[i], word_lists[j]); word_lists[j] =NULL; printf("%s",word_lists[i]->rest ->word); i = j+1; } if(i !=0){ i = 0; }else{ break;    //要素がひとつしかなかったら終了 } } return word_lists[0]; }

  • 構造体のリストをソートしたい。

    ある名簿のリストを作りました。 以下のような構造体で、 typedef struct meibo{ char name[10]; int old; struct meibo *next; }MEIBO; これを、ポインタp->next->nameをたどっていって、名前が辞書順になるようにリストを作ったのですが、 これを年齢順にソートして表示させたいんです。 どんな方法があるんでしょうか? 一旦すべてを配列に格納して、クイックソート…とかも考えたのですが、すごく領域をとるし、なんか2度手間(最初から配列に順に格納していけばよかったなぁ・・・と。 それでもやっぱり最初から名列順にするときから配列に入れておくほうがいいのでしょうか? 教えてください。 (最初から年齢を比較してリストを作れば・・ってのはなしで、名列順のリストが存在するものとしてください。)

  • 選択したリスト項目のラベル名を取り出すには?

    選択したリスト項目のラベル名を取り出すには? どなた様かご存知でしたらお助けください。 環境はWinXP,Flash8(AS2.0)です。 作りたいこと:選択したリスト項目のラベル名が取り出せること 作成した状況: 1)リスト.asファイルに配列でリストを作成、それをFlaファイルのリストボックス(listboxA)に表示。(リスト項目が1,000個以上あるのでList内のパラメータに記載はせず、配列を記載した別ファイルで対応することにしました。)  Shopping_array[0] = {label:"ばなな", data:"1"};   …  Shopping_array[13] = {label:"りんご", data:"14"}; のように表記し、  リスト表示までは問題なし。 2)Adobeのページより下記をコピペ、ダイナミックテキスト(statusMessage)を用意して表示確認。    import mx.controls.Alert;  import mx.data.binding.Binding;  import flash.filters.BevelFilter;  myListBoxListener = new Object ();  myListBoxListener.change = function (eventObj)   { var eventSource:Array = eventObj.target; var theSelectedItem = eventSource.selectedItem; var theSelectedItemLabel = theSelectedItem.label; msg = theSelectedItemLabel; statusMessage.text = msg;   };  listboxA.addEventListener ("change", myListBoxListener); 困っていること: 上記のスクリプトで動作はしたのですが、選択1回分しかテキストボックスに表示できません。 選択したものを確定させるまでは、何回でも選択できるようにしたいと思っております。 お願い: 選択した項目により、次の作業を同じようにさせたいと思っており、ここで躓いて大変困っております。 つたない文面ですが、どなた様か対処方法をご存じでしたらご教示下さい、 ※AS3.0の時代に古いものを使っております。すみません。

    • ベストアンサー
    • Flash
  • エクセル2007 VBA シート内のデータを項目名で検索し、その列を新

    エクセル2007 VBA シート内のデータを項目名で検索し、その列を新規シートにコピーする方法についてです。 VBAについては初心者で、グーグルで調べながら作ったのですが、コピー後のペーストが上手く出来ません。どうすれば最後まで処理できるのかを教えて下さい。 それと、全体的に書き方がおかしいところがありましたら指摘・改善方法を教えて下さい。 よろしくお願いします。 Sub 配列並べ替え() Dim myArray As Variant '1項目名希望順配列格納 Dim strArray As Variant '2検索用1の配列格納 Dim LastCol1 As Long '3最終列数格納 Dim LastCol2 As Long '4新規シートの最終列数格納 Dim DefSheetname As Variant '5初期のシート名取得 Dim i As Long Dim j As Long '初期シート名を取得。 DefSheetname = ActiveSheet.Name '初期シートの最終列数取得。 LastCol1 = Worksheets(DefSheetname).Range("A1").End(xlToRight).Column 'シート名:レポートの新規シート追加。 Worksheets.Add.Name = "レポート" '初期シートを選択。 Worksheets(DefSheetname).Select '項目名希望順配列格納。 myArray = Array("得意先C", "取引先名1", "製番", "相手管理NO", "品目C", _ "製品名1", "受注数", "受注残数", "納期", "受注単価", _ "受注金額", "出荷数", "出荷金額", "出荷先名1", "郵便番号", "住所1", "TEL", "FAX") '配列要素数分繰り返し処理。 For i = LBound(myArray) To UBound(myArray) '検索用の配列(項目名)格納。 strArray = myArray(i) 'A1:LastCol1範囲で配列(項目名)検索し、番号で返す。 j = WorksheetFunction.Match(strArray, Worksheets(DefSheetname).Range(Cells(1, 1), Cells(1, LastCol1)), 0) 'シート名:レポートに変数jの列数目の値を入力。 Columns(j).Copy 'シート名:レポートの最終列数取得。 LastCol2 = Worksheets("レポート").Range("A1").End(xlToRight).Column 'シート名:レポートを選択。 Worksheets("レポート").Select Range(Cells(1, 1), Cells(1, "LastCol2")).Past Next i End Sub

  • リストからの選択

    エクセルにて文字を入れる際にデータの入力規制を用いてリストから選択するようにしているのですが、そのリストを可変的にしたいのですが可能でしょうか? A1のセル: A,B,C から選択 A2のセル: A1が"A"の場合D,E,F       A1が"B"の場合D,G,H       A1が"C"の場合E,I,J の選択させたいです。

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • Listのマッチを判定する便利Util

    Javaで以下のような処理をスマートに実現する良い方法を教えて下さい。 ・Listに配列をaddして、そのListの配列に対して指定した値がいくつマッチするかを判定する。 具体例として、 1、配列を作成 String[] array1 = { "aaa", "bbb", "ccc" }; String[] array2 = { "bbb", "ccc", "ddd" }; String[] array3 = { "ccc", "ccc", "ddd" }; String[] array4 = { "fff", "ggg", "hhh" }; 2、Listに配列を格納 List list = new ArrayList(); list.add(array1); list.add(array2); list.add(array3); list.add(array4); 3、Listの要素から"ccc"と"ddd"が2つマッチする要素を取得 上記の場合は"ccc"と"ddd"が2つマッチするのはarray2だけなのでarray2を取得する。 ※array3も"ccc"と"ddd"が2つありますが、"ccc"が2つあるので計3つマッチと判定して取得しない。 質問は上記3、の箇所です。 できればfor文でループさせて突合せ処理みたいなことは避けてスマートに実現する方法を探しております。 どなたか良い方法をご存知でしたらご教示下さい、お願い致します。

    • ベストアンサー
    • Java
  • ArrayListによる計算表作成

    for文を使用し九九の計算結果を配列に格納し、その配列内の情報を表形式で表示してみる。※配列はArrayListを使用すること 上記の問題を解いています。 -------------------------------------------------------------- import java.util.ArrayList; public class m4_2 { public static void main(String args[]) { ArrayList list = new ArrayList(); String[]s = new String[9]; for(int i = 1; i<=s.length; i++){ for(int j =1; j<=s.length; j++){ list.add((i * j));     //ここがどのように記述するか?? } System.out.print(list.get(0)); System.out.print(list.get(1)); System.out.print(list.get(2)); System.out.print(list.get(3)); System.out.print(list.get(4)); System.out.print(list.get(5)); System.out.print(list.get(6)); System.out.print(list.get(7)); System.out.print(list.get(8)); System.out.print("\n"); } } } ---------------------------------------------------------- 実行結果イメージ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 (以下省略) 私の書いたソースでは1の位しか計算してくれません。 今月から本格的にJavaを勉強し始めた初心者なので どうかよろしくお願いいたします。

    • ベストアンサー
    • Java