2017-08-14 55 views
2

我試圖實現的是有一個JLabel顯示List多個項目。遍歷列表但它只顯示最後一項

我已經定義列表如下,但是當我測試的代碼我的方法通過列表進行迭代,點擊一個按鈕後,只能說明這是"DONE!"列表中的最後一項

我試圖完成一個JLabel在列表中顯示每個按鈕點擊後只剩下一項目

public class ScoutGUI extends javax.swing.JFrame { 

    /** 
    * Creates new form ScoutGUI 
    */ 
    List<String> strings = Arrays.asList("Do you mind Clutter in Room?", "Do you mind alarm clocks?","Do you mind loud visitors?","Can you sleep with lights on?","Do you mind noise past Midnight?", 
     "Do you consider yourself as an introvert?", "Do you consider yourself as an extrovert?","Do you like to go to parties?","Do you drink alcoholic beverages?(21+)", "DONE!"); 


    ArrayList<Student> obj = new ArrayList<>(); 
    String name , email , gender , major , year , language , building ; 
    int id , i; 
    public ScoutGUI() { 
     initComponents(); 
    } 

    public ScoutGUI(int a) { 
     i = a; 
     initComponents(); 

    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     panel1 = new java.awt.Panel(); 
     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 
     jLabel1 = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jButton1.setFont(new java.awt.Font("Courier", 0, 13)); // NOI18N 
     jButton1.setText("NO"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     jButton2.setFont(new java.awt.Font("Courier", 0, 13)); // NOI18N 
     jButton2.setText("YES"); 
     jButton2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton2ActionPerformed(evt); 
      } 
     }); 

     jLabel1.setFont(new java.awt.Font("Courier New", 1, 18)); // NOI18N 
     jLabel1.setBorder(javax.swing.BorderFactory.createMatteBorder(1, 1, 1, 1, new java.awt.Color(204, 255, 153))); 

     javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1); 
     panel1.setLayout(panel1Layout); 
     panel1Layout.setHorizontalGroup(
      panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(panel1Layout.createSequentialGroup() 
       .addGap(71, 71, 71) 
       .addComponent(jButton1) 
       .addGap(94, 94, 94) 
       .addComponent(jButton2) 
       .addContainerGap(129, Short.MAX_VALUE)) 
      .addGroup(panel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     panel1Layout.setVerticalGroup(
      panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(panel1Layout.createSequentialGroup() 
       .addGap(26, 26, 26) 
       .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jButton1) 
        .addComponent(jButton2)) 
       .addContainerGap(68, Short.MAX_VALUE)) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(panel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     ); 

     pack(); 
    }// </editor-fold>       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 
     //skip and never 

     buttonpressActionPerformed(); 

    }           

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 
     //match and update 

     buttonpressActionPerformed(); 

    }           

    private void buttonpressActionPerformed() { 


     // int i = 0; 


     Iterator<String> iterator = strings.iterator(); 


     //for (String strin : strings) 
     while (iterator.hasNext()) 

     { 

      //if (jButton2.isSelected() || jButton1.isSelected()) 
      //{ 
      jLabel1.setText(iterator.next()); 
      //}  

     } 

    } 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(ScoutGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(ScoutGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(ScoutGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(ScoutGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new ScoutGUI().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JLabel jLabel1; 
    private java.awt.Panel panel1; 
    // End of variables declaration     
} 
+1

'jLabel1.setText(jLabel1.getText()+「」+ iterator.next());' –

+0

感謝您的回覆。儘管我試圖讓每個人都一次展示一個。您提供的解決方案一次在jLabel1中顯示列表中的所有項目。如何在點擊一個按鈕後才能顯示每個顯示。在這種情況下,按鈕是jButton1(「YES」)和jButton2(「NO」)。 – user5301179

回答

1

您當前的代碼始終覆蓋在JPanel中當前文本,它是如此之快,你看不到它。通過定義一個int變量來獲取列表中的下一個項目,而不是使用Iterator,而是每次按增加。
index變量在這個例子中公衆詮釋:

jLabel1.setText(strings.get(index)); 
if (index < strings.size()-1) 
     index++; 

沒有循環,在你的方法需要的就是一切。

+0

非常感謝。這工作完美,似乎是一個更有效的方式來迭代通過列表。 – user5301179

0

爲了找到集合中的下一個字符串,您需要以某種方式瞭解當前項目。

一種方法是存儲索引(或迭代器)在一個領域:

List<String> strings=<...> 
// 1. store index  
int sentenceIndex = 0; 
// 2. store iterator. You could get ConcurrentModificationException if change list and then use iterator. 
Iterator<String> iterator = strings.getIterator(); 
private void buttonpressActionPerformed() { 
// 1. use index. 
if (sentenceIndex < strings.size()-1) { // avoid IndexOutOfBoundException 
    String nextSentence = strings.get(sentenceIndex++); 
} 
// 2. use iterator 
if (iterator.hasNext()) { 
    String nextSentence = iterator.next(); 
} 

但事實上,你並不需要保存的東西:

// 3. calculate current index 
String currentSentence = jLabel1.getText(); 
int currentIndex = strings.indexOf(currentSentence); 
int nextIndex = incrementIndex(currentIndex); 
String nextSentence = strings.get(nextIndex); 

請注意,我建議新方法incrementIndex。在其中,您不僅可以添加長時間檢查,還可以從最後一個元素跳到第一個或只是隨機選擇。

每種方法都有親和反政府:

  1. 索引需要邊界檢查
  2. 迭代限制列表更新
  3. 指數也calcucaliton需要邊界檢查和label1應具有正確的初始值

    我寧願儲存指數,但它是你的選擇