2009-05-19 109 views
-3

夥計們,請幫助我如何將我的JTextField(ID,LastName,FirstName,Course,Year)中的輸入值傳遞到我的ArrayList中,而無需替換現有的元素。 同時我會用我的ArrayList存儲的值在我的JTextArea追加(摘要)如何將Java文本字段傳遞給數組列表?

////// PALOS TEXTFIELD 

List<Form> myList = new ArrayList<Form>(); 


     id = new JTextField(20); 


     id.addKeyListener(new KeyAdapter() 
     { 
      public void keyTyped(KeyEvent ke){ 
       char char1 = ke.getKeyChar(); 
       if((!(Character.isDigit(char1))) && (char1 != '\b')){ 
         ke.consume(); 
        } 
       } 
      }); 
      id.addActionListener(handler); 
      fname = new JTextField(20); 
      fname.setFont(new Font("TimesRoman", Font.PLAIN,14)); 
      fname.setHorizontalAlignment(JTextField.CENTER); 
      fname.setBorder(BorderFactory.createEtchedBorder(3, Color.green, Color.white)); 

      fname.addKeyListener(new KeyAdapter() 
      { 
       public void keyTyped(KeyEvent ke){ 
        char char1 = ke.getKeyChar(); 
        if((!(Character.isLetter(char1))) && 
          (char1 != '\b')) 
          { 
          ke.consume(); 
          } 
          } 
          public void keyReleased(KeyEvent e){} 
          public void keyPressed(KeyEvent e){} 
          }); 
      fname.addActionListener(handler); 

    lname = new JTextField(20); 

    lname.addKeyListener(new KeyAdapter() 
     { 
      public void keyTyped(KeyEvent ke){ 
       char char1 = ke.getKeyChar(); 
       if((!(Character.isLetter(char1))) && 
        (char1 != '\b')) 
        { 
         ke.consume(); 
        } 
       } 
        public void keyReleased(KeyEvent e){} 
        public void keyPressed(KeyEvent e){} 
          }); 
    lname.addActionListener(handler); 

    year = new JTextField(20); 

    year.addKeyListener(new KeyAdapter() 
     { 
     public void keyTyped(KeyEvent ke){ 
      char char1 = ke.getKeyChar(); 
       if((!(Character.isDigit(char1))) && 
        (char1 != '\b')) 
        { 
         ke.consume(); 
        } 
       } 
       public void keyReleased(KeyEvent e){} 
       public void keyPressed(KeyEvent e){} 
        }); 
    year.addActionListener(handler); 

    course = new JTextField(20); 

     course.addKeyListener(new KeyAdapter() 
     { 
      public void keyTyped(KeyEvent ke){ 
      char char1 = ke.getKeyChar(); 
       if((!(Character.isLetter(char1))) && 
        (char1 != '\b')) 
        { 
         ke.consume(); 
        } 
       } 
        public void keyReleased(KeyEvent e){} 
        public void keyPressed(KeyEvent e){} 
       }); 
     course.addActionListener(handler); 

////PALOS BUTTONS 

    addB = new JButton(namesB[1]); 
     addB.setHorizontalAlignment(JTextField.CENTER); 
     addB.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      id.selectAll(); 
      fname.selectAll(); 
      lname.selectAll(); 
      course.selectAll(); 
      year.selectAll();      
      String textID = id.getSelectedText(); 
      String textFName = fname.getSelectedText(); 
      String textLName = lname.getSelectedText(); 
      String textCourse = course.getSelectedText(); 
      String textYear = year.getSelectedText(); 


        summary.setCaretPosition(summary.getDocument().getLength()); 

       } 
      }); 

/////pALOS TEXTAREA 

    summary = new JTextArea(11,31); 
      summary.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 5)); 
      summary.setText("ID" + newtab + "FirstName " + newtab + "LastName" + newtab + "Course" + newtab + "Year" + newline); 
      summary.setEditable(false); 
+1

如何僅發佈代碼的必要部分而不是全部?沒有人會篩選所有代碼...請編輯您的問題 – 2009-05-19 12:56:27

回答

1

我要在這一個刺,但我要在這裏做一些假設。

// Obviously no public fields, but I cant be bothered to make constructor 
// or get/set methods 
public class Form 
{ 
    public String id; 
    public String lastName; 
    public String firstName; 
    public String course; 
    public String year; 
} 

所以,你要形成的一個新的實例添加到您的表單列表每次該按鈕被按下:

public class MyGui 
{ 
    private List<Form> forms = new ArrayList<Form>(); 
    private JTextField fname; 
    private JTextField id; 
    private JTextField lname; 
    private JTextField course; 
    private JTextField year; 
    // build gui .... 
} 

這是動作監聽你的「保存/添加」按鈕

public void actionPerformed(ActionEvent e) 
{ 
    Form form = new Form(); 
    form.id = id.getText(); 
    form.lastName = lname.getText(); 
    form.firstName = fname.getText(); 
    form.course = course.getText(); 
    form.year = year.getText(); 
    forms.add(form); 
} 
0

您發佈的代碼中的相關部分位於您的ActionListener中,您在此處理按鈕單擊。首先,您可以將您請求的ArrayList模型作爲字符串列表(列表<列表<字符串> >)維護 - 或者在@ willcodejavaforfood的Form結構中定義的類型。這樣你就可以輕鬆保留以前的行。每次單擊按鈕時,都可以從已經編碼的文本字段中獲取數據,現在只需將其作爲新行添加到模型中即可。然後你可以迭代模型並替換JTextArea中的數據。

模型的聲明是這樣的:

List<List<String>> model = new ArrayList<List<String>>(); 

和更新的動作偵聽器會是這個樣子:

addB.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     id.selectAll(); 
     fname.selectAll(); 
     lname.selectAll(); 
     course.selectAll(); 
     year.selectAll(); 
     String textID = id.getSelectedText(); 
     String textFName = fname.getSelectedText(); 
     String textLName = lname.getSelectedText(); 
     String textCourse = course.getSelectedText(); 
     String textYear = year.getSelectedText(); 

     List<String> line = Arrays.asList(new String[]{textID,textFName,textLName,textCourse,textYear}); 
     model.add(line); 

     StringBuilder sb = new StringBuilder(); 
     sb.append("ID\tFirst\tLast\tCourse\tYear\n"); 
     for(List<String> input : model) { 
      for (String item : input) { 
       sb.append(item); 
       if (input.indexOf(item) == input.size()-1) { 
        sb.append("\n"); 
       } else { 
        sb.append("\t"); 
       } 
      } 
     } 
     summary.setText(sb.toString()); 
    } 
}); 

這是一個有點蠻力,但它得到工作完成。還有更多的工作可以確保正確的列對齊以及確保在行尾等處使用換行符的更漂亮的方法,但是,正如他們所說的那樣,剩下的就是讀者的練習。

相關問題