Сортировка и добавление в ArrayList

#java #swing #sorting #jtextarea

#java #swing #сортировка #jtextarea

Вопрос:

Итак, вот мой код, я создаю программу, которая сортирует текст по экземплярам объектов, которые создаются автоматически, когда пользователь начинает вводить текст в JTextArea. Здесь, в классе StudentList, у меня есть строка firstname, lastname, dateofbirth и year. Когда пользователь начинает вводить, создается экземпляр StudentList, затем первый текст перед тем, как пользователь делает пробел, сохраняется как firstname, а текст после пробела lastname, пользователь нажимает enter, и текст после ввода становится датой рождения в формате (мм / дд / гггг), и пользователь снова нажимает enter, и текст после ввода становится годом (в форме «Номер года, т. е. Год 10, год 12 …). Например: JosephsNancy 3/04/2009 nYear 11 имя становится: Джозеф, фамилия: Нэнси. дата рождения: 04.03.1999 год: 11-й год для первого созданного экземпляра объекта типа StudentList.

Впоследствии, после создания первого объекта и сохранения year (переменной последнего экземпляра), мне понравится другой экземпляр StudentList, где процесс повторяется, если текст вводится после Year … Справка Все вновь созданные StudentList добавляются в ArrayList

 import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;

public class InfoAdd implements KeyListener {
    private JTextArea textar;
    private JTextArea textarea;
    private JPanel panel;
    ArrayList <StudentList> stdlist;

    public static void main (String [] args) {
        InfoAdd inadd = new InfoAdd();
        inadd.go();

    }

    public void go() {
        JFrame frame = new JFrame("InfoAdd");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        panel = new JPanel();
        JPanel btpanel = new JPanel();
        JButton button = new JButton("Click");
        textarea = new JTextArea(10, 15);
        textar = new JTextArea(10, 15);
        JScrollPane scrollpane = new JScrollPane(textarea);
        JScrollPane scrollpan = new JScrollPane(textar);
        textarea.addKeyListener(this);
        textarea.setLineWrap(true);
        textar.setLineWrap(true);

        scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollpan.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpan.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(scrollpane);
        panel.add(scrollpan);
        btpanel.add(button);
        frame.setSize(300, 300);
        frame.add(BorderLayout.WEST, panel);
        frame.add(BorderLayout.EAST, btpanel);
        frame.setVisible(true);

    }

    public void keyTyped(KeyEvent e) {
        String add = textarea.getText();
        String [] delimiter = add.split("\s ");
        String [] enter = add.split("[\r\n] ");
        stdlist = new ArrayList<StudentList>();
        for(int i=0;i<add.length();i  ) {
            StudentList sdt = new StudentList();
            if(delimiter.length==2) {
                sdt.SetFirstName(delimiter[i]);

            }

            stdlist.add(sdt);
            textar.setEditable(false);
            textar.setText("Firstname: " sdt.getFirstName() "nLastName: " sdt.getLastName() "nYear: ");
        }
    }

    public void keyPressed(KeyEvent e) {

    }
    public void keyReleased(KeyEvent e) {

    }



    class StudentList {
        private String firstname;
        private String lastname;
        private String year;
        private String dateofbirth;


        public void SetFirstName(String y) {
            y = firstname;
        }
        public void setLastName(String c) {
            c = lastname;
        }
        public void setYear(String t) {
            t = year;
        }
        public void setDateofBirth(String u) {
            u = dateofbirth;
        }
        public String getFirstName() {
            return firstname;
        }
        public String getLastName() {
            return lastname;
        }
        public String getYear() {
            return year;
        }
        public String getDateofBirth(){
            return dateofbirth;
        }

    }
}
  

Комментарии:

1. Одна вещь, которую стоит исправить в первую очередь, — это назначение в ваших StudentList установщиках, они работают неправильно, поэтому вы пытаетесь присвоить значение элемента параметру, а не значение параметра полю элемента. например, это должно быть public void setFirstName(String y) { firstname = y; } (Кстати, y не самое удачное имя).

2. Когда вы хотите прослушать текстовые изменения в текстовых компонентах, используйте DocumentListener вместо KeyListener . Нравится: textArea.getDocument().addDocumentListener()

Ответ №1:

как упоминает Д.Дж.Браун, ваше создание setter неверно, и я меняю некоторую строку кода в InfoAdd классе.(netbeans, intellij idea, eclipse, если вы используете одну из этих IDE. эта IDE предоставляет возможность генерировать методы получения и настройки. используйте это, тогда у вас не возникнет проблем)

 import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;
public class InfoAdd implements KeyListener {
    private JTextArea textar;
    private JTextArea textarea;
    private JPanel panel;
    ArrayList<StudentList> stdlist;
    public static void main(String[] args) {
        InfoAdd inadd = new InfoAdd();
        inadd.go();
    }
    public void go() {
        JFrame frame = new JFrame("InfoAdd");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        panel = new JPanel();
        JPanel btpanel = new JPanel();
        JButton button = new JButton("Click");
        textarea = new JTextArea(10, 15);
        textar = new JTextArea(10, 15);
        JScrollPane scrollpane = new JScrollPane(textarea);
        JScrollPane scrollpan = new JScrollPane(textar);
        textarea.addKeyListener(this);
        textarea.setLineWrap(true);
        textar.setLineWrap(true);
        scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollpan.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpan.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(scrollpane);
        panel.add(scrollpan);
        btpanel.add(button);
        frame.setSize(300, 300);
        frame.add(BorderLayout.WEST, panel);
        frame.add(BorderLayout.EAST, btpanel);
        frame.setVisible(true);
    }
    public void keyTyped(KeyEvent e) {    }
    public void keyPressed(KeyEvent e) {    }
    public void keyReleased(KeyEvent e) {
        String add = textarea.getText();
        String[] delimiter = add.split("\s ");
        String[] enter = add.split("[\r\n] ");
        stdlist = new ArrayList<>();
        for (int i = 0; i <= add.length(); i  ) {
        StudentList studentList = new StudentList();
        System.out.println(delimiter.length);
        switch (enter.length) {
                case 1:
                    setName(delimiter, studentList);
                    break;
                case 2:
                    setName(delimiter, studentList);
                    studentList.setDateofbirth(enter[1]);
                    break;
                default:
                    setName(delimiter, studentList);
                    studentList.setDateofbirth(enter[1]);
                    studentList.setYear(enter[2]);
                    break;
            }
            stdlist.add(studentList);
            textar.setEditable(false);
            textar.setText("Firstname: "   studentList.getFirstname()   "nLastName: "   studentList.getLastname() " nDateOfBirth: " studentList.getDateofbirth()   "nYear: "   studentList.getYear());
        }
    }
    private void setName(String[] delimiter, StudentList studentList) {
        if (delimiter.length == 1) {
            studentList.setFirstname(delimiter[0]);
        } else if (delimiter.length == 2) {
            studentList.setFirstname(delimiter[0]);
            studentList.setLastname(delimiter[1]);
        }
    }
    class StudentList {
        private String firstname;
        private String lastname;
        private String year;
        private String dateofbirth;
        public String getFirstname() {
            return firstname;
        }
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
        public String getLastname() {
            return lastname;
        }
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
        public String getYear() {
            return year;
        }
        public void setYear(String year) {
            this.year = year;
        }
        public String getDateofbirth() {
            return dateofbirth;
        }
        public void setDateofbirth(String dateofbirth) {
            this.dateofbirth = dateofbirth;
        }
    }
}