2012-02-27 14 views
3

私は、私のJavaプログラムのリストに入れたいデータを含む(アクセス)データベーステーブルを持っています。テーブルは複数の列(ID、名前など)で構成されていますJList項目の配列データを取得する

私が望むのは、すべての名前をリストしたJListです。次に、リストの項目をダブルクリックすると、ID番号が表示されますその項目は別の表に挿入されます。

私は既にリストを実装し、dbテーブル(名前列)からのレコードでそれを設定しました。私が問題を抱えているのは、ユーザーがアイテムをダブルクリックしたとき、そのビデオのIDを取得するにはどうしたらいいですか?リストを作成するデータベース呼び出しは、複数の列を選択してそれらをすべて配列に入れます。リスト項目を配列にどのようにリンクできるかは十分には分かりません。ここで

は、Javaクラス...私がこれまで得たものである

ArrayList list = new ArrayList(); 
    ArrayList video = new ArrayList(); 
    list = VideoData.getVideoList(); 

    JList videolist = new JList();; 
    Vector data = new Vector();; 

    for (int i=0; i < list.size(); i++) { 
      video = (ArrayList) list.get(i); 
      data.addElement(video.get(3)); 
     } 

    videolist.setListData(data); 
    videolist.setSelectedIndex(0); 
    videolist.addMouseListener(new ActionJList(videolist)); 
    videolist.setFixedCellWidth(300); 
    add(new JScrollPane(videolist)); 

何getVideoList()(現在のdoulbe-クリック機能は以下の通りです

ArrayList list = new ArrayList(); 

try { 
    ResultSet res = stmt.executeQuery("SELECT * FROM Items ORDER BY VidID ASC"); 
    while (res.next()) { // there is a result 
     ArrayList sub = new ArrayList(); 
     sub.add(res.getString("VidID"));; 
     sub.add(res.getString("Name")); 
     sub.add(res.getString("Writer")); 
     // add sub array to list 
     list.add(sub); 
    } 
} catch (Exception e) { 
    System.out.println(e); 
    return null; 
} 

return list; 

が含まれていますこれは私がネットで見つけ)

public void mouseClicked(MouseEvent e){  
    if(e.getClickCount() == 2){ // double click 
    int index = list.locationToIndex(e.getPoint()); 
    ListModel dlm = list.getModel(); 
    Object item = dlm.getElementAt(index);; 
    list.ensureIndexIsVisible(index); 
    System.out.println("Double clicked on " + item); 
    } 
    } 

は...のみJListのセル内でリストされているものを私に告げるこの項目から、私は何をできるようにする必要があると、その選択した項目の他の配列データを取得しています。

+0

はvideo.get(3)作業のですか? 3つの要素だけを追加しているため、get(index)は0に基づいているためです。あなたは4番目の要素にアクセスしています。 – JProgrammer

答えて

1

(。私は、コードを読みやすくするためにジェネリック医薬品<...>を使用している)

@HovercraftFullOfEelsが言ったように、JListのは、全体のビデオオブジェクト含まれる場合があります。使用方法

static class Video { 
    String vidID; 
    String name; 
    String writer; 

    @Override 
    public String toString() { 
     return writer; // For JList display 
    } 
} 

を、次にようになり続く。 getVideoListと

List<Video> list = VideoData.getVideoList(); 

JList videolist = new JList(); 

Vector<Video> data = new Vector<Video>(); 
for (int i=0; i < list.size(); i++) { 
    Video video = list.get(i); 
    data.addElement(video); 
} 

videolist.setListData(data); 
videolist.setSelectedIndex(0); 
videolist.addMouseListener(new ActionJList(videolist)); 
videolist.setFixedCellWidth(300); 
add(new JScrollPane(videolist)); 

として:

List<Video> getVideoList() { 
List<Video> list = new ArrayList<Video>(); 

try { 
    ResultSet res = stmt.executeQuery("SELECT VidID, Name, Writer FROM Items ORDER BY VidID ASC"); 
    while (res.next()) { // there is a result 
     Video sub = new Video(); 
     sub.vidID = res.getString("VidID"); 
     sub.name = res.getString("Name"); 
     sub.writer = res.getString("Writer"); 
     list.add(sub); 
    } 
     res.close(); 
} catch (Exception e) { 
    System.out.println(e); 
    return null; 
} 

return list; 
} 
+0

-1ビューの理由でオーバーライドするtoString – kleopatra

1

JListには、必要なすべての情報が含まれているオブジェクトが設定されている必要があります。次に、取り出された項目を単にキャストします(またはジェネリックJListを使用する場合、キャストする必要はありません)。 Listを正しく表示するには、カスタムレンダラーを与えます(または、これを行う弱い方法は、オブジェクトにtoString()メソッドを与えることですが、レンダラーを使用する方がはるかに優れています)。あなたのリストには、関連するすべてのデータではなく、データベースから返されたフィールドのいずれかが保持されているように見えるので、これを変更します。

+0

-1 toStringをオーバーライドする場合(downvoteを使用しない場合は、カスタムレンダラーを優先して自分自身を保護します:-) – kleopatra

0

名前をキーに、IDを値としてハッシュマップを作成できます。このハッシュマップにデータを設定し、JListにデータを設定します。 mouseClickイベントでは、関数hashmap.get(name)を使ってIDを取得できます。

関連する問題