2012-06-16 91 views
2

我有一個MySQL數據庫,其中包含我想要在我的java程序中填充到JList中的數據。我有兩個JList,一個填寫事件標題,另一個填寫客人姓名。如何使用另一個JList中的數據填充JList

我想要的是,當用戶點擊任何活動標題時,第二個JList將顯示屬於該活動的所有訪客姓名。

我已經成功地使用所有事件標題填充第一個JList。我遇到的問題是當用戶點擊活動標題時,嘉賓姓名將在第二個JList上顯示兩次。我怎樣才能讓它只顯示一次?

這是我走到這一步......

的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

請暫時忘掉SQL。然後按照以下步驟操作:

  1. 開始於the example ---對應Java Web Start link
  2. 玩樣品,看看如何添加元素到列表中。
  3. 然後,你需要做的就是抓取一個你想複製的參考,併爲每個元素複製然後添加到第二個列表。
  4. 享受Java。

編輯: 我仍然在尋找在你的代碼,我仍然困惑是怎麼回事的(請考​​慮制定SSCCE)。但讓我猜測,正如有人告訴我,當你打電話給ListSelectionListener時,你沒有使用ListSelectionEventgetIsValueAdjusting(),對嗎?因此,這可能就是它,for more read here

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(); 
}