2015-04-07 80 views
0

我想將兩個數組的內容添加到兩個TextFields。當你運行程序時,問題是當我重新繪製窗口時,我嘗試顯示的當前TextField(第70 - 83行),它們只顯示它們數組中的最後一項。有什麼辦法增加在堆疊列表中的所有項目將數組添加到JTextField

這是我的第一類ClassNameSorting 代碼(一個ontop的另一個。):

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.util.*; 
public class ClassNameSorting extends JFrame { 

    JTextField studentNameInputFirst, studentNameInputLast, studentNamesEneteredLast, studentNamesEnteredFirst; 
    JButton nextName, sort, backToStart; 
    JLabel firstName, lastName, classList; 
    String disp = ""; 
    ArrayList<String> studentNameFirst = new ArrayList<String>(); 
    ArrayList<String> studentNameLast = new ArrayList<String>(); 
    ArrayList<String> sortedStudentNameFirst = new ArrayList<String>(); 
    ArrayList<String> savedUnsortedStudentNameLast = new ArrayList<String>(); 
    Container container = getContentPane(); 

    public ClassNameSorting() { 
     container.setLayout(new FlowLayout()); 

     studentNameInputFirst = new JTextField(15); 
     studentNameInputLast = new JTextField(15); 
     nextName = new JButton("Save"); 
     sort = new JButton("Sort"); 
     firstName = new JLabel("First Name: "); 
     lastName = new JLabel("Last Name: "); 

     nextName.setPreferredSize(new Dimension(110, 20)); 
     sort.setPreferredSize(new Dimension(110, 20)); 

     container.add(firstName); 
     container.add(studentNameInputFirst); 
     container.add(lastName); 
     container.add(studentNameInputLast); 
     container.add(nextName); 
     container.add(sort); 

     nextName.addActionListener(new nextNameListener()); 
     sort.addActionListener(new sortListener()); 

     setSize(262, 120); 
     setVisible(true); 
    } 
    private class nextNameListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      studentNameFirst.add(studentNameInputFirst.getText()); 
      studentNameLast.add(studentNameInputLast.getText()); 
      studentNameInputLast.setText(null); 
      studentNameInputFirst.setText(null); 
     } 
    } 
    private class sortListener implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 

      savedUnsortedStudentNameLast = new ArrayList<String>(studentNameLast); 
      Collections.sort(studentNameLast); 

      int totalSizeOfArray = studentNameLast.size(); 
      for(int i = 0; i < totalSizeOfArray; i++){ 
       boolean containsYorN = false; 
       String tempElementForContains = studentNameLast.get(i); 
       String tempElementFromStudentNameLast = savedUnsortedStudentNameLast.get(i); 
       containsYorN = savedUnsortedStudentNameLast.contains(tempElementForContains); 

       if(containsYorN == true){ 
        int tempIndexPos = savedUnsortedStudentNameLast.indexOf(tempElementForContains); 
        String tempIndexElement = studentNameFirst.get(tempIndexPos); 
        sortedStudentNameFirst.add(i, tempIndexElement); 
       }  
      } 
      studentNamesEneteredLast = new JTextField(); 
      studentNamesEnteredFirst = new JTextField(); 
      for(int i = 0; i < totalSizeOfArray; i++){ 
       studentNamesEneteredLast.setText(studentNameLast.get(i)); 
      } 
      for(int i = 0; i < totalSizeOfArray; i++){ 
       studentNamesEnteredFirst.setText(sortedStudentNameFirst.get(i)); 
      } 
      studentNamesEneteredLast.setEditable(false); 
      studentNamesEnteredFirst.setEditable(false); 
      container.add(studentNamesEneteredLast); 
      container.add(studentNamesEnteredFirst); 
      setSize(262, 500); 
      revalidate(); 
     } 
    } 
} 

我第二類是:(DrawMainWindow)

import javax.swing.JFrame; 
public class DrawMainWindow { 
    public static void main(String[] args) { 
     ClassNameSorting drawGui = new ClassNameSorting(); 
     drawGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     drawGui.setLocationRelativeTo(null); 
    } 
} 

第一個數組是studentNameLast。我正在嘗試將其添加到studentNamesEnteredLast文本字段中。第二個是sortedStudentNameFirst被添加到studentNamesEnteredFirst。

感謝您的幫助!

回答

0

能夠切換到GridLayout,然後添加每個姓氏,然後一起名字。

代碼:

container.setLayout(new GridLayout(totalSizeOfArray+3,2)); 
    for(int i = 0; i < totalSizeOfArray; i++){ 
     studentNamesEnteredLast = new JTextField(); 
     studentNamesEnteredFirst = new JTextField(); 
     studentNamesEnteredFirst.setEditable(false); 
     studentNamesEnteredLast.setEditable(false); 
     studentNamesEnteredLast.setText(studentNameLast.get(i)); 
     studentNamesEnteredFirst.setText(sortedStudentNameFirst.get(i)); 
     container.add(studentNamesEnteredLast); 
     container.add(studentNamesEnteredFirst); 
    } 

例子:

enter image description here

2
for(int i = 0; i < totalSizeOfArray; i++){ 
    studentNamesEneteredLast.setText(studentNameLast.get(i)); 
} 

JTextField中的文本將只反映列表的最後一項。如果你想添加整個列表,創建列表選擇路線,並設置JTextField中的文本與字符串(您不妨讓他們通過一些字符分隔 - 下面使用逗號)

StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < totalSizeOfArray; i++){ 
    sb.append(studentNameLast.get(i)).append(",");//comma delim 
} 
studentNamesEneteredLast.setText(sb.toString()); 

不完全確定你在做什麼,但JList或JTable可能更適合於顯示列表信息

+0

感謝您的答覆!我在尋找的內容與此屏幕截圖中的內容類似:http://i.imgur.com/hT8F3Rj.png 當我單擊排序時,它將並排放入姓氏和名字。 –

+0

我不確定我完全清楚你想要什麼,但是也許JTable是你的:https://docs.oracle.com/javase/tutorial/uiswing/components/table.html – copeg

+0

我是實際上能夠做到這一點沒有。我只是在循環中創建了新的TextField。謝謝你的幫助! (查看我的回答) –