2

Java プログラムの JList に入力したいデータを含む MySQL データベースがあります。私は 2 つの JList を持っています。1 つはイベント タイトルで埋められ、もう 1 つはゲスト名で埋められます。

私が望むのは、ユーザーがいずれかのイベント タイトルをクリックすると、2 番目の JList にそのイベントに属するすべてのゲスト名が表示されることです。

最初の JList にすべてのイベント タイトルを正常に入力しました。私が問題を抱えているのは、ユーザーがイベント タイトルをクリックすると、ゲスト名が 2 番目の JList に 2 回表示されることです。一度だけ表示するにはどうすればよいですか?

これが私がこれまでに得たものです...

Java クラス

private JList getJListEvents() {
    if (jListEvents == null) {
        jListEvents = new JList();
        Border border = BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(1, Color.black, Color.black), "Events", TitledBorder.LEFT, TitledBorder.TOP);
        jListEvents.setBorder(border);
        jListEvents.setModel(new DefaultListModel());
        jListEvents.setBounds(new Rectangle(15, 60, 361, 421));

        Events lEvents = new Events();
        lEvents.loadEvents(jListEvents);

        jListEvents.addListSelectionListener(new ListSelectionListener(){
            public void valueChanged(ListSelectionEvent e){
                EventC eventC = new EventC();
                //eventC.MonitorRegDetailsInfo(jListEvents, jTextFieldEventName, jTextFieldEventVenue, jTextFieldEventDate, jTextFieldEventTime, jTextAreaEventDesc);
                //eventC.MonitorRegPackageInfo(jListEvents, jTextFieldBallroom, jTextFieldBallroomPrice, jTextFieldMeal, jTextFieldMealPrice, jTextFieldEntertainment, jTextFieldEntertainmentPrice);
                eventC.MonitorRegGuest(jListEvents, jListGuest);
            }
        });
    }
    return jListEvents;
}

コントローラ クラス

public void MonitorRegGuest(JList l, JList l2){
    String event = l.getSelectedValue().toString();
    Events retrieveGuest = new Events(event);
    retrieveGuest.loadGuests(l2);
}

すべての sql ステートメントを含むクラス

public void loadGuests(JList l){
    ResultSet rs = null;
    ResultSet rs2 = null;
    ResultSet rs3 = null;
    MySQLController db = new MySQLController();
    db.getConnection();

    String sqlQuery = "SELECT MemberID FROM event WHERE EventName = '" + EventName + "'";
    try {
        rs = db.readRequest(sqlQuery);
        while(rs.next()){
            MemberID = rs.getString("MemberID");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    String sqlQuery2 = "SELECT GuestListID FROM guestlist WHERE MemberID = '" + MemberID + "'";
    try {
        rs2 = db.readRequest(sqlQuery2);
        while(rs2.next()){
            GuestListID = rs2.getString("GuestListID");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    String sqlQuery3 = "SELECT Name FROM guestcontact WHERE GuestListID = '" + GuestListID + "'";
    try {
        rs3 = db.readRequest(sqlQuery3);
        while(rs3.next()){
            ((DefaultListModel)l.getModel()).addElement(rs3.getString("Name"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    db.terminate();
}

前もって感謝します!

4

2 に答える 2

4

しばらく忘れてくださいSQL。次に、以下の手順に従います。

  1. --- 対応するJava Web Startリンクから始めます。
  2. サンプルを再生して、要素をリストに追加する方法を確認してください。
  3. 次に、コピーする要素への参照を取得し、要素ごとにそれをコピーして、2 番目のリストに追加するだけです。
  4. Javaをお楽しみください。

編集: 私はまだあなたのコードを見ていますが、何が起こっているのかまだ混乱しています( SSCCEの作成を検討してください)。しかし、何かが私に言っているように、 を呼び出すときに のgetIsValueAdjusting()ListSelectionListener使用していないのではないでしょうか? したがって、これで十分かもしれません。詳細については、こちらを参照してくださいListSelectionEvent

于 2012-06-16T09:15:10.750 に答える
2

私が見る限り、リストにデータを入力する前にリストをクリアしていないため、次のように最初にモデルをクリアしてみてください。

String sqlQuery3 = "SELECT Name FROM guestcontact WHERE GuestListID = '" + GuestListID + "'";
try {
    rs3 = db.readRequest(sqlQuery3);
    DefaultListModel lm = (DefaultListModel)l;
    lm.clear();
    while(rs3.next()){
        (lm.getModel()).addElement(rs3.getString("Name"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}
于 2012-06-16T09:11:23.817 に答える