2015-04-08 6 views
-1

То, что я пытался это выбрать элемент из JList, выберите JButton (при необходимости также щелкнуть на JRadioButton), а затем значение выбранного элемента будет добавлено к другим JList.JList пункт снят после того, как щелчок по JButton

Проблема заключается в том, что после того, как я нажал JButton или JRadioButton, пункт в оригинальной 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, короткий, работоспособный, компилируется с закодированным значением для JList/XxxListModel в локальной переменной – mKorbel

+0

Если что-либо, по крайней мере, вы должны предоставить код, связанный с конфигурацией 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() **. создайте простой класс для своего жанра и поместите объект этого класса в combobox и в chanellist! этот способ намного легче работать. вы могли бы уменьшить свой код до 10-15 строк, а также более общий. действительно ли вы хотите добавить ** новый код ** для каждого ** нового жанра **? – Ben

+0

На самом деле, есть слишком много повторений, и легко ошибиться. Как я знаю, в mysql я могу использовать синтаксис типа «select chTitle from channelist where chGenre = 'e», и я могу создать класс или метод, чтобы определить, какой жанр будет выбран. Есть ли аналогичный способ в Java? – hanabinoir

+0

вы можете попробовать использовать карту. эта карта содержит жанр (Sci-Fi) и chGenre (s). затем спросите карту. – Ben