プロが教える店舗&オフィスのセキュリティ対策術

左のリスト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();
}
}
}

A 回答 (2件)

そういったことではありません。



>配列citiesに格納された順に都市名をu1で表示する
をしたいならば、u1の要素を、cities順に並び替える仕組みが必要です。
それを作ってください。

私だったら、s1をループの基準にするのではなく、citiesをループの基準にします。
    • good
    • 0

>u1.add(s1.getItem(i), j);


ここ。j番目に追加する際、u1の要素数がjより少ない場合、末尾に追加されてしまう。

参考URL:http://e-class.center.yuge.ac.jp/jdk_docs/ja/api … int)

この回答への補足

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

補足日時:2014/04/06 17:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!