- 締切済み
選択した項目を隣のリストへ移動
左のリストs1に表示された 都市名を選択してダブルクリックすると、 選択されている都市名を右のリストu1に移動して、配列citiesに格納された順に都市名をu1で表示するアップレットを作りたいのですが、移動した都市名が配列citiesに格納された順になりません。 選択した都市名が配列citiesで何番目かを調べて、それを変数jに格納して、jの値をもとに上から順に都市名を表示するようにしました。 改善点が分からないので、教えてください。 プログラムは以下の通り import java.awt.*; import java.applet.*; import java.awt.event.*; public class CityList extends Applet implements ActionListener{ List s1 = new List(12, true); //左側のリスト List u1 = new List(12, true); //右側のリスト String[] cities = {"札幌","仙台","千葉","横浜","川崎", "名古屋", "京都", "大阪", "神戸", "広島", "北九州", "福岡"}; public void init(){ for(int i = 0; i < cities.length; i++) s1.add(cities[i]); s1.addActionListener(this); add(s1); add(u1); } public void actionPerformed(ActionEvent e){ //配列citiesの添え字 int j; //左側のリストs1を,上から順に調べる for(int i = s1.getItemCount() - 1; i >= 0; i--){ //左側のリストs1で項目が選択されているかどうか if(s1.isIndexSelected(i)){ //配列citiesの添え字を0に初期化 j = 0; while(true){ //左側のリストs1で選択されている項目が, //配列citiesでは何番目かを調べる if(s1.getItem(i) == cities[j]) break; else j++; } //選択されている項目を,右側のリストu1に移動させる u1.add(s1.getItem(i), j); s1.remove(i); } repaint(); } } }
- みんなの回答 (2)
- 専門家の回答
補足
u1.add(s1.getItem(i), j); の直前に if(u1.getItemCount() - 1 < j) j = u1.getItemCount() - 1; を入れたのですが、ダメでした。 後は何を入れればいいですか?