2015-04-08 83 views
-1

我試圖什麼是從JList選擇一個項目,點擊JButton(任選地也點擊JRadioButton),然後選擇的項的值將被添加到另一個JList項一個JButton

的問題是,我點擊了JButtonJRadioButton後,在原JList項被取消,並加入到目的地JList是「空」的東西。

第一次JLists。這些項由JCombobox中的選擇指定,並從另一個類的ArrayList中生成值。

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    ChannelList cl = new ChannelList(); 
    cl.createList(); 

    //determine JList by JCombobox selecton 
    String genre = (String)c.getSelectedItem(); 

    switch(genre){ 
    case "Please Select Genre of Channel": 
     vt1.clear(); 
     lchannels.setListData(vt1); 
     break; 
    case "All Genres": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      vt1.add(cl.chList[i].getChTitle()); 
      lchannels.setListData(vt1); 
     } 
     break; 
    case "Entertainment": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      if(chGenre == 'e'){ 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
      } 
     } 
     break; 
    case "Movie": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      if(chGenre == 'm'){ 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
      } 
     } 
     break; 
    case "News/Business": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      if(chGenre == 'n'){ 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
      } 
     } 
     break; 
    case "Sci-Fi": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      if(chGenre == 's'){ 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
      } 
     } 
     break; 
    case "Sports": 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      if(chGenre == 't'){ 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
      } 
     } 
     break; 
    } 
} 
+3

爲更好地幫助越早張貼SSCCE/MCVE,短,可運行,可編譯,並在局部變量 – mKorbel

+0

爲JList的/ XxxListModel硬編碼值。如果有的話,最起碼,你應該提供與JList的配置代碼。有必要了解這個問題。但理想情況下,您應該提供一個小例子來重現您的問題,我們可以編譯以查看問題而無需經過猜測。 – Gnoupi

回答

0

問題解決了,因爲我改變了檢索值的邏輯。

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    ChannelList cl = new ChannelList(); 
    cl.createList(); 

    //determine JList by JCombobox selecton 
    genre = c.getSelectedItem().toString(); 

    if(e.getSource() == c){ 
     vt1.clear(); 
     for(int i =0; i < cl.chList.length; i++){ 
      char chGenre = cl.chList[i].getChGenre(); 
      switch(genre){ 
      case "Please Select Genre of Channel": 
       lchannels.setListData(vt1); 
       break; 
      case "All Genres": 
       vt1.add(cl.chList[i].getChTitle()); 
       lchannels.setListData(vt1); 
       break; 
      case "Entertainment": 
       if(chGenre == 'e'){ 
        vt1.add(cl.chList[i].getChTitle()); 
        lchannels.setListData(vt1); 
       } 
       break; 
      case "Movie": 
       if(chGenre == 'm'){ 
        vt1.add(cl.chList[i].getChTitle()); 
        lchannels.setListData(vt1); 
       } 
       break; 
      case "News/Business": 
       if(chGenre == 'n'){ 
        vt1.add(cl.chList[i].getChTitle()); 
        lchannels.setListData(vt1); 
       } 
       break; 
      case "Sci-Fi": 
       if(chGenre == 's'){ 
        vt1.add(cl.chList[i].getChTitle()); 
        lchannels.setListData(vt1); 
       } 
       break; 
      case "Sports": 
       if(chGenre == 't'){ 
        vt1.add(cl.chList[i].getChTitle()); 
        lchannels.setListData(vt1); 
       } 
       break; 
      } 
     } 
    } 
} 
+0

儘量多用真正的物品! **不要使用** char **作爲** getChGenre()**。爲你的流派創建一個簡單的類,並把這個類的對象放在組合框和組合框中!這種方式更容易處理。你可以將你的代碼減少到10-15行,它也是更通用的。你真的想爲每個**新流派添加**新代碼**嗎? – Ben

+0

實際上,重複次數太多,容易犯錯。據我所知,在MySQL中,我可以使用類似於「從chGenre ='e'中的channelist選擇chTitle」的語法,並且我可以創建一個類或方法來確定要選擇哪個類型。 Java中有類似的方法嗎? – hanabinoir

+0

你可以嘗試使用地圖。這張地圖包含流派(科幻)和chGenre(s)。然後問地圖。 – Ben