2009-05-19 104 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()); 
    } 
}); 

这是一个有点蛮力,但它得到工作完成。还有更多的工作可以确保正确的列对齐以及确保在行尾等处使用换行符的更漂亮的方法,但是,正如他们所说的那样,剩下的就是读者的练习。

相关问题