2017-12-18 3 views
0

내 과정에서 다른 프로그램을 작성 중이며 arraylist와 함께 여러 기능을 수행하는 프로그램을 작성해야합니다. 정수 (즉, 클래스의 마크). 내 문제는 "마크"arraylist의 값을 오름차순으로 출력하려고 할 때 각 값이 자체 행에있는 경우 가장 최근에 입력 한 값만 표시한다는 것입니다.Java Netbeans 8.0 Jframe GUI 프로그램 - arraylist의 각 색인 값이 jtextArea의 개별 행에 표시되지 않습니다.

예를 들어, 25와 54를 입력하고 "정렬"버튼을 클릭하면 Jtextarea에 54 개만 표시됩니다. 내 코드는 아래에 나와 있으며 문제는 sortButtonActionPerformed 메서드 내부에 있음을 알 수 있습니다.

import java.util.*; 
public class MarksGUI extends javax.swing.JFrame { 

    ArrayList <Integer> marks = new ArrayList(); 
    ArrayList <Integer> marksSorted = new ArrayList(); 

    int numlvlR=0; 
    int numlvl1=0; 
    int numlvl2=0; 
    int numlvl3=0; 
    int numlvl4=0; 


    public MarksGUI() { 

     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() { 

     titleLabel = new javax.swing.JLabel(); 
     markLabel = new javax.swing.JLabel(); 
     markInput = new javax.swing.JTextField(); 
     addButton = new javax.swing.JButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     analyzeField = new javax.swing.JTextArea(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     classmarksField = new javax.swing.JTextArea(); 
     sortButton = new javax.swing.JButton(); 
     analyzeButton = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     titleLabel.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N 
     titleLabel.setForeground(new java.awt.Color(0, 0, 204)); 
     titleLabel.setText("Marks Program"); 

     markLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
     markLabel.setText("Student Mark:"); 

     addButton.setText("Add"); 
     addButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       addButtonActionPerformed(evt); 
      } 
     }); 

     analyzeField.setEditable(false); 
     analyzeField.setColumns(20); 
     analyzeField.setRows(5); 
     jScrollPane1.setViewportView(analyzeField); 

     classmarksField.setEditable(false); 
     classmarksField.setColumns(20); 
     classmarksField.setRows(5); 
     jScrollPane2.setViewportView(classmarksField); 

     sortButton.setText("Sort"); 
     sortButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       sortButtonActionPerformed(evt); 
      } 
     }); 

     analyzeButton.setText("Analyze"); 
     analyzeButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       analyzeButtonActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGap(0, 32, Short.MAX_VALUE) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(42, 42, 42)) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(107, 107, 107) 
         .addComponent(titleLabel)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(75, 75, 75) 
         .addComponent(markLabel) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(markInput, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(addButton))) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(86, 86, 86) 
       .addComponent(sortButton) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(analyzeButton) 
       .addGap(90, 90, 90)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(titleLabel) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(markInput, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(markLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(addButton)) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE) 
        .addComponent(jScrollPane1)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(sortButton) 
        .addComponent(analyzeButton)) 
       .addContainerGap(19, Short.MAX_VALUE)) 
     ); 

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

    //add method is working///////////// 
    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {           
     int newMarks; 

     newMarks = Integer.parseInt(markInput.getText()); 

     marks.add(newMarks); 
     System.out.println(marks);//testing purposes 




    }           
    //problem is in sort method////////////// 
    private void sortButtonActionPerformed(java.awt.event.ActionEvent evt) {           

     int biggestMark = largestMark();//YOU WERE HERE/////////////////////////////////////////////////////////////////////////////////////////// 
     for(int k = 0;k<marks.size();k++) 
     { 

      marksSorted.add((marks.get(k))); 
      System.out.println(marksSorted);//testing purposes 

     } 
     for(int x = 0;x<marks.size();x++) 
     { 
      Collections.sort(marksSorted); 
      classmarksField.setText(marksSorted.get(x)+"\n"); 
      System.out.println(marksSorted);//testing purposes 
     } 

    }**           
    //working////////////////////// 
    private void analyzeButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     int maxMark, minMark, mark; 
     analyzeField.setText("Class Average:"+classAverage()+"\n"+"Maximum Mark:"+largestMark()+"\n"+"Mininmum Mark:"+smallestMark()+"\n"+"Range of Marks:"+rangeofMarks()+"\n"+"Num at level 4:"+numlvl4+"\n"+"Num at level 3"+numlvl3+"\n"+"Num at level 2:"+numlvl2+"\n"+"Num at level 1:"+numlvl1+"\n"+"Num at level R:"+numlvlR); 









    }            
    public int classAverage(){ 
     int marksTotal, marksAverage; 
     marksTotal = 0; 

     for(int i = 0; i<marks.size();i++){ 
      marksTotal = marksTotal+marks.get(i); 
     } 
     marksAverage = marksTotal/marks.size(); 
     return(marksAverage); 
    } 
    public int smallestMark(){ 
     int smallestmarkValue; 
     smallestmarkValue = 100; 
     for(int y = 0; y<marks.size();y++){ 
      if(marks.get(y)<=smallestmarkValue) 
      { 
       smallestmarkValue = marks.get(y); 
      } 
      else 
      { 
      } 
     } 
     return(smallestmarkValue); 
    } 
    public int largestMark(){ 
     int largestmarkValue; 
     largestmarkValue = 0; 
     for(int z = 0; z<marks.size();z++){ 
      if(marks.get(z)>=largestmarkValue) 
      { 
       largestmarkValue = marks.get(z); 
      } 
      else 
      { 
      } 

     } 
     return(largestmarkValue);  
    } 
    public int rangeofMarks(){ 
     int range; 
     range = largestMark()-smallestMark(); 
     return(range); 
    } 
    public int numwitheachlevel(){ 
     int mark; 
     mark = 0; 

     for(int j = 0; j<marks.size();j++){ 
      mark = marks.get(j); 
      if(mark<50) 
      { 
       numlvlR++; 
      } 
      else if((mark >= 50) && (mark < 60)) 
      { 
       numlvl1++; 
      } 
      else if((mark >= 60) && (mark < 70)) 
      { 
       numlvl2++; 
      } 
      else if((mark >= 70) && (mark < 80)) 
      { 
       numlvl3++; 
      } 
      else if(mark >= 80) 
      { 
       numlvl4++; 
      } 

     //numeachlvl.addAll(numlvlR,numlvl1,numlvl2,numlvl3,numlvl4); 
     //return(numeachlvl);//you were here/////////////////////////////////////////////////////////////////////////////// 

    } 
    //System.out.println("Range:"+rangeofMarks()); 
    System.out.println("Largest mark"+largestMark()); 
    System.out.println("Smallest mark:"+smallestMark()); 
    System.out.println("Number at level R:"+numlvlR); 
    System.out.println("Number at level 1:"+numlvl1); 
    System.out.println("Number at level 2:"+numlvl2); 
    System.out.println("Number at level 3:"+numlvl3); 
    System.out.println("Number at level 4:"+numlvl4); 

    /** 
    * @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(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.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 MarksGUI().setVisible(true); 
      } 
     }); 
    } 


    // Variables declaration - do not modify      
    private javax.swing.JButton addButton; 
    private javax.swing.JButton analyzeButton; 
    private javax.swing.JTextArea analyzeField; 
    private javax.swing.JTextArea classmarksField; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTextField markInput; 
    private javax.swing.JLabel markLabel; 
    private javax.swing.JButton sortButton; 
    private javax.swing.JLabel titleLabel; 
    // End of variables declaration     
} 
+0

또한 numwitheachlevel() 메서드가 원하는대로 작동하지 않습니다. 마크가 특정 범위 내에 있으면 값 1이 이전 변수 값에 추가됩니다. 이것이 제가 "numlvlR ++;"을 가지고있는 이유입니다. 그래서 사람이 범위 내에 마크를 가지고있을 때 하나가 변수에 추가됩니다. – Sandorj

+1

유효한 [mcve]를 작성하여 게시하십시오. 문제가 관련 본질에 따라 다듬어 져야 할 필요가있을 때 관련없는 코드를 거쳐 갈 필요가 없습니다. 제가 제안하는 것을 완전히 이해할 수있는 링크를 읽으십시오. –

답변

1

. 예를 들어, 내가 입력 25 다음 54과 나는 "종류"버튼을 클릭 만 (54)는 사용자가 데이터를 가져 오는 경우

for(int x = 0;x<marks.size();x++) 
{ 
    Collections.sort(marksSorted); 
    classmarksField.setText(marksSorted.get(x)+"\n"); 
    System.out.println(marksSorted);//testing purposes 
} 

이 왜 루프를 제어 할 수 marks.size를 사용하는 JTextArea에 표시됩니다 markssorted 목록. 정렬은 데이터 사본을 작성하지 않습니다.

왜 루프를 통해 목록을 정렬하겠습니까? 당신은 무엇을 바꿀 것으로 예상합니까?

왜 setText (...)를 사용 하시겠습니까? 이렇게하면 텍스트 영역의 모든 텍스트가 바뀌므로 목록의 마지막 값만 가져옵니다.

JTextArea의 append(...) 메서드를 사용하십시오.

+0

이제는 내 메서드 중 하나에서 ArrayList를 반환하려고합니다. 그것은 나에게 "java.lang.IndexOutOfBoundsException : Index : 4, Size : 0"오류를 주었다. – Sandorj

+0

나는 이미 당신에게 대답을주었습니다. 루프에서 2 개의 ArrayList를 참조하는 이유는 무엇입니까? ArrayList가 비어있는 이유는 무엇입니까? 기본 디버깅이 필요합니다. – camickr

관련 문제