【问题标题】:How to pass Java textfield to an array list?如何将 Java 文本字段传递给数组列表?
【发布时间】:2009-05-19 12:50:57
【问题描述】:

伙计们,请帮助我如何在不替换现有元素的情况下将我的 JTextField(ID,LastName,FirstName,Course,Year) 中的输入值传递到我的 ArrayList 中。 同时,我将使用我的 ArrayList 存储值附加到我的 JTextArea(summary)

////// 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);

【问题讨论】:

  • 只发布代码的必要部分而不是全部如何?没有人会筛选所有这些代码...请编辑您的问题
  • 我宁愿看到 Form 的代码,也不愿看到大部分垃圾:)

标签: java eclipse swing


【解决方案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;
}

因此,您希望每次按下该按钮时都向表单列表中添加一个新的 Form 实例:

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);
}

【讨论】:

    【解决方案2】:

    您发布的代码中的相关部分在您的ActionListener 中,您可以在其中处理按钮单击。首先,您可以将您请求的 ArrayList 模型维护为字符串列表 (List>) 或在 @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());
        }
    });
    

    这有点蛮力,但它可以完成工作。可以做更多的事情来确保正确的列对齐和更漂亮的方法来确保在行尾换行等,但正如他们所说,这留给读者作为练习。

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多